gpt4 book ai didi

c# - 由于未设置必需的属性,ModelState 为假

转载 作者:太空宇宙 更新时间:2023-11-03 23:32:55 25 4
gpt4 key购买 nike

所以,我有一个我很好奇的问题。我有一个 UserAccountViewModel,我正在重复使用它来创建帐户 View 和编辑帐户 View 。这样我就可以为我的代码使用一个 View 和一个 View 模型,但使用不同的 Controller 操作。

在创建帐户时,用户名、密码和确认密码都是必填字段。但是,在“编辑帐户”中,这些字段不是必填字段(我在“编辑帐户” View 中隐藏了这些字段)。

问题是当我这样做的时候:

[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,我在上面添加了错误声明,它说:

这是因为用户名、密码和确认密码字段是必需的。我如何重用我的 View 模型,以便我可以在创建帐户时使用那些需要但在编辑帐户时不需要的字段?也就是说,我想保持这些字段相同(在编辑帐户中不可编辑?)

最佳答案

您可以将一些虚拟值输出到 View 中的隐藏字段中,这样当它们返回时它们就不会为空,但是,这会来回推送更多数据。

其次,您可以从模型状态中删除键,从而消除它们的错误。

ModelState.Remove("UserName");
ModelState.Remove("Password");
ModelState.Remove("ConfirmPassword");

这样做之后,当您调用 ModelState.IsValid 时,它将仅根据您感兴趣的字段给出答案

HTH

关于c# - 由于未设置必需的属性,ModelState 为假,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31519223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com