【发布时间】:2015-07-20 14:32:52
【问题描述】:
所以,我有一个问题我很好奇。我有一个 UserAccountViewModel,我正在重用它来创建帐户视图和编辑帐户视图。这样我就可以为我的代码使用一个视图和一个视图模型,但可以使用不同的控制器操作。
在创建帐户时,用户名、密码和确认密码都是必填字段。但是,在编辑帐户上,这些字段不是必填字段(我在编辑帐户的视图中隐藏了这些字段)。
问题是当我这样做时:
[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,我在上面添加了错误语句,它说:
这是因为用户名、密码和确认密码字段是必需的。如何重用我的视图模型,以便我可以在创建帐户时使用那些需要但在编辑帐户时不需要的字段?也就是说,我想保持这些字段相同(在编辑帐户中不可编辑?)
【问题讨论】:
-
使用视图模型的全部意义在于只在视图中包含您需要的那些属性——请参阅What is ViewModel in MVC?。创建 2 个视图模型,
EditAccountVM和CreateAccountVM(继承自EditAccountVM并包含 3 个额外的必需属性。
标签: c# asp.net-mvc-4 viewmodel