由于未设置必需的属性,ModelState 为假
ModelState is false due to required properties not set
所以,我有个问题很好奇。我有一个 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 returns false 我在上面添加了错误声明,上面写着:
这是因为用户名、密码和确认密码字段是必需的。我如何重用我的视图模型,以便我可以在创建帐户时使用那些需要但在编辑帐户时不需要的字段?也就是说,我想保持这些字段相同(在编辑帐户中不可编辑?)
您可以将一些虚拟值输出到视图中的隐藏字段中,这样当它们返回时它们就不会为空,但是,这会来回推送更多数据。
其次,您可以从模型状态中删除键,从而消除它们的错误。
ModelState.Remove("UserName");
ModelState.Remove("Password");
ModelState.Remove("ConfirmPassword");
这样做之后,当您调用ModelState.IsValid时,它只会根据您感兴趣的字段给出答案
HTH
所以,我有个问题很好奇。我有一个 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 returns false 我在上面添加了错误声明,上面写着:
这是因为用户名、密码和确认密码字段是必需的。我如何重用我的视图模型,以便我可以在创建帐户时使用那些需要但在编辑帐户时不需要的字段?也就是说,我想保持这些字段相同(在编辑帐户中不可编辑?)
您可以将一些虚拟值输出到视图中的隐藏字段中,这样当它们返回时它们就不会为空,但是,这会来回推送更多数据。
其次,您可以从模型状态中删除键,从而消除它们的错误。
ModelState.Remove("UserName");
ModelState.Remove("Password");
ModelState.Remove("ConfirmPassword");
这样做之后,当您调用ModelState.IsValid时,它只会根据您感兴趣的字段给出答案
HTH