子对象的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"的密钥,但这不起作用。

或者,我在这里采取了错误的方法吗?我应该如何处理在同一页面上有两个表单?

子对象的AddModelError

可以使用分部视图

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)
你应该会看到验证错误