子对象的AddModelError
本文关键字:AddModelError 对象 | 更新日期: 2023-09-27 17:49:14
我的网站上有一个使用这些模型类的设置页面:
public class NameVm
{
public string GivenName { get; set; }
public string FamilyName { get; set; }
}
public class PasswordVm
{
public string OldPassword { get; set; }
public string NewPassword { get; set; }
public string ConfirmPassword { get; set; }
}
public class AccountVm
{
public NameVm Name { get; set; }
public PasswordVm Password { get; set; }
}
这是控制器:
public class AccountController : Controller
{
[HttpGet]
public override ActionResult Index()
{
var accountVm = AccountVmFromActiveUser();
return View(accountVm);
}
[HttpPost]
public ActionResult EditName(NameVm vm)
{
...
}
[HttpPost]
public ActionResult EditPassword(PasswordVm vm)
{
if (ModelState.IsValid)
{
if (!ValidateUser(this.ActiveUser, vm.OldPassword))
{
ModelState.AddModelError("????",
"Existing password is incorrect.");
}
else
UpdateUserPassword(vm);
}
var accountVm = AccountVmFromActiveUser();
accountVm.Password = vm;
return View(accountVm);
}
}
在我的Account.cshtml
文件中,我定义了两个表单-一个提交给EditName
,一个提交给EditPassword
。这是一个大文件,所以这里是一个小的摘录:
@Html.EditorFor(model => model.Password.OldPassword)
@Html.ValidationFor(model => model.Password.OldPassword)
我的问题是:我如何让ValidationFor
显示我在EditPassword
方法中添加的错误消息?我尝试使用"Password.OldPassword"
的密钥,但这不起作用。
可以使用分部视图
1)在Account.cshtml
分开提交密码的形式,并把它放在部分视图_EditPassword.cshml
(通常我把部分视图在Views'Shared
文件夹)
@Html.Partial("_EditPassword", @Model.Password)
渲染Account.cshtml
中的局部视图
2)在部分视图_EditPassword.cshtml
中可以使用
@Html.EditorFor(model => model.OldPassword)
@Html.ValidationFor(model => model.OldPassword)
你应该会看到验证错误