使用 ViewModel 将数据从视图传递到控制器
Passing Data from View to Controller using ViewModel
我想使用 ViewModel 将表单数据从视图传递到控制器,这可能吗?发送数据时我得到空值。我的密码是:
我的 ViewModel 包含模型 class 参考。我要传递的数据是针对两个模型的,即 MasterSchoolInfo 和 MasterUserInfo,但是在提交控制器中的发布值时显示为公牛。对此的任何帮助都会非常有帮助。我是 Asp.Net MVC 的新手。
如果我将模型传递给控制器,那么它工作正常,但是一旦我将它更改为视图模型,它就开始向控制器发送空值。
我认为从模型更改为视图模型是因为我想为两个不同的模型传递数据并在控制器中使用它们。
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);
}
例如,如果您的代码是:
public class MasterSchoolInfo
{
public string name{get;set;}
}
您应该在视图中实现输入:
<input type="text" name="school.name">
我想使用 ViewModel 将表单数据从视图传递到控制器,这可能吗?发送数据时我得到空值。我的密码是:
我的 ViewModel 包含模型 class 参考。我要传递的数据是针对两个模型的,即 MasterSchoolInfo 和 MasterUserInfo,但是在提交控制器中的发布值时显示为公牛。对此的任何帮助都会非常有帮助。我是 Asp.Net MVC 的新手。
如果我将模型传递给控制器,那么它工作正常,但是一旦我将它更改为视图模型,它就开始向控制器发送空值。
我认为从模型更改为视图模型是因为我想为两个不同的模型传递数据并在控制器中使用它们。
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);
}
例如,如果您的代码是:
public class MasterSchoolInfo
{
public string name{get;set;}
}
您应该在视图中实现输入:
<input type="text" name="school.name">