フォームの送信時にエラーが発生した場合、検証エラーメッセージが表示されることに気付きました。これはすばらしいことです。ただし、入力した値は保持されません。実際には、それらは消えており、さらに悪いことに、datepickerも機能しません。だから、ピッカーはもう使えなくなった。だから、私の質問は次のとおりです。
- 検証前に入力した値を保持する方法は?
- 可能であれば、検証エラーが発生した後にピッカーコントロールを再利用する方法はありますか?
フォームの送信時にエラーが発生した場合、検証エラーメッセージが表示されることに気付きました。これはすばらしいことです。ただし、入力した値は保持されません。実際には、それらは消えており、さらに悪いことに、datepickerも機能しません。だから、ピッカーはもう使えなくなった。だから、私の質問は次のとおりです。
フォームの値をビュー モデルにデータ バインドしていると仮定すると、検証が失敗したときにビュー モデルをビューに戻すだけです。例を見てみましょう:
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 を記述しますEditorForModel
。EditorFor(model => model.UserName)
とも使用できますEditorFor(model => model.Password)
。または、HTML を手で書き出すこともできます。重要なことは、HTML フィールド名がビュー モデル クラスのプロパティと一致することです。
<input type="text" name="UserName" />
ASP.NET Mvc は、フォーム要素をHttpPost
アクション内の LoginViewModel に自動的にデータ バインドします。無効なモデルをビューに戻すだけで、フィールドにデータが入力されます。