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ファイルでは、2 つのフォームを定義しEditNameていますEditPassword。これは大きなファイルなので、ここに小さな抜粋を示します。

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

私の質問は:メソッドValidationForに追加したエラー メッセージを表示するにはどうすればよいですか? EditPasswordのキーを使用してみました"Password.OldPassword"が、うまくいきませんでした。

または、ここで間違ったアプローチを取っていますか? 同じページに 2 つのフォームがある場合、どのように処理すればよいですか?

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 に答える