因此,我有一个我很好奇的问题。我有一个UserAccountViewModel,我正在重新使用它来创建帐户视图和编辑帐户视图。这样我可以为我的代码使用一个视图和一个视图模型,但是可以使用不同的控制器操作。由于未设置所需的属性,所以ModelState为false
在创建帐户,用户名,密码和确认密码都是必填字段。但是,在编辑帐户上,这些字段不是必填字段(我在编辑帐户的视图中隐藏这些字段)。
问题是,当我这样做:
[HttpPost]
public ActionResult EditUserAccount_Save(UserAccountViewModel editUserAccountViewModel)
{
var errors = ModelState.Values.SelectMany(v => v.Errors);
if (ModelState.IsValid)
{
editUserAccountViewModel.UserName = UserSession.GetValue(StateNameEnum.UserName, StateNameEnum.UserName.ToString()) as string;
db_user user = new db_user();
user.Title = editUserAccountViewModel.Title;
user.FirstName = editUserAccountViewModel.FirstName;
user.LastName = editUserAccountViewModel.LastName;
user.PhoneNumber = editUserAccountViewModel.PhoneNumber;
user.AltPhoneNumber = editUserAccountViewModel.AltPhoneNumber;
user.EmailAddress = editUserAccountViewModel.EmailAddress;
user.LanguageId = context.languages.Where(t => t.Code == editUserAccountViewModel.Language).Select(t => t.Id).FirstOrDefault();
user.CreatedDate = DateTime.Now;
user.UserId = WebSecurity.GetUserId(editUserAccountViewModel.UserName);
context.Entry(user).State = EntityState.Modified;
context.SaveChanges();
JsonResult res = Json(new { Success = true, data = "", Message = "" });
return res;
}
JsonResult res2 = Json(new { Success = false, data = "", Message = "" });
return res2;
}
我ModelState.IsValid返回false,我添加了错误上述声明,它说:
这是因为用户名,密码和确认密码字段需要。如何重新使用我的viewmodel,以便在创建帐户时可以使用这些字段,但在编辑帐户时不需要这些字段?也就是说,我想保持这些字段是相同的(在编辑帐户中不可编辑?)
使用视图模型的整点是答案在视图中只包含你需要的属性 - 参考[什么是MVC中的ViewModel?](http://stackoverflow.com/questions/11064316/what-is-viewmodel-in-mvc)。创建2个视图模型,EditAccountVM和CreateAccountVM(它继承自EditAccountVM并包含3个额外的必需属性。 –