0

我的网站上有一个使用这些模型类的设置页面:

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",但这不起作用。

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

4

1 回答 1

1

您可以使用局部视图。

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)

你应该会看到验证错误

于 2012-12-21T13:12:46.827 回答