2017-10-04 183 views
0

我想將視圖的數據從視圖傳遞給控制器​​與ViewModel是可能的?發送數據時我變空了。我的代碼是:使用ViewModel將視圖中的數據傳遞給控制器​​

我的ViewModel包含模型類的引用。我想要通過的數據是兩個模型,即MasterSchoolInfo和MasterUserInfo,但提交控制器中的張貼值顯示爲公牛。任何對此的幫助將會非常有幫助。我是Asp.Net MVC的新手。

如果我將模型傳遞給控制器​​,那麼工作正常,但是一旦我將其更改爲viewmodel,它就開始向控制器發佈null。

我從模型更改爲ViewModel背後的想法是因爲我想傳遞兩種不同模型的數據並在控制器中使用它們。

視圖模型

namespace ABC.ViewModels 
{ 
    public class UserInfoViewModel 
    { 
     public MasterSchoolInfo School { get; set; } 
     public MasterTeacherInfo Teacher{ get; set; } 
     public MasterStudentInfo Student { get; set; } 
     public MasterParentInfo Parent { get; set; } 
     public MasterUserInfo User { get; set; } 
     public MasterUserRole Role { get; set; } 

    } 
} 

控制器

[HttpPost] 
public ContentResult CreateSchool(UserInfoViewModel _usrData) 
{ 
    var content = string.Empty; 
    if ((!String.IsNullOrEmpty(HttpContext.Session.GetString("UserEmail"))) && (!String.IsNullOrEmpty(HttpContext.Session.GetString("UserRole")))) 
    { 
     int UserId = Convert.ToInt32(HttpContext.Session.GetString("UserId")); 
     string UserEmail = Convert.ToString(HttpContext.Session.GetString("UserEmail")); 
     string UserRole = Convert.ToString(HttpContext.Session.GetString("UserRole")); 
     byte[] salt = encryption.generatePasswordSalt("school"); 
     string password = encryption.generateHashedPassword("school", salt); 
     if (UserRole == "Super Administrator") 
     { 
      _usrData.School.CreatedBy = UserEmail; 
      _usrData.School.CreatedOn = DateTime.Now; 
      _usrData.School.ApprovalStatus = true; 
      _usrData.School.Status = true; 
      MasterUserInfo userInfo = new MasterUserInfo(); 
      userInfo.RoleId = 4; 
      userInfo.EmailId = _usrData.School.PrimaryEmailId; 
      userInfo.Salt = Convert.ToBase64String(salt).ToString(); 
      userInfo.Password = password; 
      userInfo.CreatedBy = UserEmail; 
      userInfo.CreatedOn = DateTime.Now; 
      userInfo.ApprovalStatus = true; 
      userInfo.Status = true; 
      //string[] str = schoolInfo.PrimaryEmailId.Split('.'); 
      //userInfo.Username = str[0].ToString(); 
      userInfo.Username = _usrData.User.Username.ToString(); 
      MasterSchoolInfo masterSchool = _context.Set<MasterSchoolInfo>().LastOrDefault(); 
      if (masterSchool != null) 
      { 
       var lastschoolcode = masterSchool.OpinschoolCode;     
       var val = lastschoolcode.Substring(4, lastschoolcode.Length - 4); 
       int r = Convert.ToInt32(val) + 1; 
       string newusercode = "IESC000" + r; 
       userInfo.UserCode = newusercode; 
       _usrData.School.OpinschoolCode = newusercode; 
      } 
      else 
      { 
       string newusercode = "IESC000" + 1; 
       userInfo.UserCode = newusercode; 
       _usrData.School.OpinschoolCode = newusercode; 
      } 
      if (ModelState.IsValid) 
      { 

       _context.MasterUserInfo.Add(userInfo); 
       _context.SaveChanges(); 

       MasterUserInfo masterUser = _context.Set<MasterUserInfo>().Last(); 
       _usrData.School.UserId = masterUser.Id; 
       _context.MasterSchoolInfo.Add(_usrData.School); 
       _context.SaveChanges(); 
       TempData["Message"] = "School Added Successfully!"; 
       content = "Success"; 
      } 
      else 
      { 
       content = "Error"; 
      } 
     } 
     else 
     { 
      content = "Error"; 
     } 
    } 
    else 
    { 
     content = "Error"; 
    } 
    return Content(content); 
} 
+0

_「如果我將模型傳遞給控制器​​,那工作正常,但是一旦我將其更改爲viewmodel,它就開始向控制器發佈null」_您在'Model'和'ViewModel' o_O下的含義是什麼? 。 – SeM

+0

模型意味着數據是使用MasterSchoolInfo的模型類直接傳遞的,並且工作正常,但是現在當我將其更改爲通過ViewModel傳遞時,它發佈null @SeM –

回答

1

例如,如果你的代碼是:

public class MasterSchoolInfo 
{ 
      public string name{get;set;} 
} 

你應該考慮實現輸入:

<input type="text" name="school.name"> 
+0

謝謝@soroosh。這是我錯過的東西。我使用的是asp-for,所以我認爲這就足夠了。非常感謝Buddy –

+0

通常你可以使用asp-for:。 –

相關問題