C# 子对象的AddModelError?

C# 子对象的AddModelError?,c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,我的网站上有一个设置页面,使用以下模型类: 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 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
中,分离提交密码的表单,并将其放入部分视图
\u EditPassword.cshml
(通常我将部分视图放入
views\Shared
文件夹)

使用

Account.cshtml

2) 在部分视图中,您可以使用

@Html.EditorFor(model => model.OldPassword)
@Html.ValidationFor(model => model.OldPassword)

您应该会看到验证错误

如果使用由@Html.EditFor()呈现的输入元素的“id”属性的值作为.AddModelError的键,该怎么办?或者是吗?您更大的问题是您为模型类型AccountVM创建元素,但您的控制器post需要PasswordVM-这些值永远不会从表单中获取,因为输入元素名为“Password.OldPassword”,但模型绑定器只查找“OldPassword”。您应该更改EditPassword以接收AccountVM类型的参数,然后使用其中的password属性。
@Html.EditorFor(model => model.OldPassword)
@Html.ValidationFor(model => model.OldPassword)