8

フォームの送信時にエラーが発生した場合、検証エラーメッセージが表示されることに気付きました。これはすばらしいことです。ただし、入力した値は保持されません。実際には、それらは消えており、さらに悪いことに、datepickerも機能しません。だから、ピッカーはもう使えなくなった。だから、私の質問は次のとおりです。

  1. 検証前に入力した値を保持する方法は?
  2. 可能であれば、検証エラーが発生した後にピッカーコントロールを再利用する方法はありますか?
4

1 に答える 1

10

フォームの値をビュー モデルにデータ バインドしていると仮定すると、検証が失敗したときにビュー モデルをビューに戻すだけです。例を見てみましょう:

ビュー モデル:

public class ViewModel {
    [Required]
    public string UserName { get; set; }

    [Required, DataType(DataTypes.Password)]
    public string Password { get; set; }
}

コントローラー:

public class LoginController : Controller {
    [HttpGet]
    public ActionResult Login() {
        return View();
    }

    [HttpPost]
    public ActionResult Login(LoginViewModel model) {
        if( ModelState.IsValid ) {
            if( Membership.ValidateUser(model.UserName, model.Password) ) {
                FormsAuthentication.SetAuthCookie(model.UserName, false);
                return Redirect("~/");
            }
        }

        // If we got this far, something went wrong.
        // Pass the model back to the view.
        return View(model);
    }
}

景色:

@Html.ValidationSummary()

using(@Html.BeginForm())
{
    @Html.EditorForModel()
}

HtmlHelper メソッドBeginFormとを使用してフォーム HTML を記述しますEditorForModelEditorFor(model => model.UserName)とも使用できますEditorFor(model => model.Password)。または、HTML を手で書き出すこともできます。重要なことは、HTML フィールド名がビュー モデル クラスのプロパティと一致することです。

<input type="text" name="UserName" />

ASP.NET Mvc は、フォーム要素をHttpPostアクション内の LoginViewModel に自動的にデータ バインドします。無効なモデルをビューに戻すだけで、フィールドにデータが入力されます。

于 2012-08-01T19:55:42.277 に答える