デフォルトのログイン機能を備えたMVCアプリがあり、チェックボックスモデルの状態をチェックせずにログインすると、 「キーを使用すると、モデルクラスで必須とマークされていませんRemember me
」というエラーが追加されます
。私にとっては、私を忘れないでください。"The Remember me? field is required."
RememberMe
したがってif(ModelState.IsValid)
、ユーザーを検証する前に確認すると、IsValid プロパティは、RememberMe エラーのために false です。
したがって、現在 ModelState["RememberMe"].Errors.Clear();
、ログインアクションメソッドとチェックでこのエラーを削除していますModelState.IsValid
。
このエラーが に追加されないようにするより良い方法はありModelState
ますか?
私はVS 2012 RCを使用しています
コントローラ
[HttpPost]
public ActionResult Login(LoginModel model, string returnUrl) {
ModelState["RememberMe"].Errors.Clear();
if(ModelState.IsValid) {
if(Membership.ValidateUser(model.UserName, model.Password)) {
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
if(Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
&& !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\")) {
return Redirect(returnUrl);
}
else {
return RedirectToAction("Index", "Home");
}
}
else {
ModelState.AddModelError("", "The user name or password provided is incorrect.");
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
モデル
public class LoginModel
{
[Required]
[Display(Name = "User name")]
public string UserName { get; set; }
[Required]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
[Display(Name = "Remember me?")]
public bool RememberMe { get; set; }
}
意見
@{ Layout = "~/Views/Shared/_lightLayout.cshtml"; }
@model MvcFoodService.Models.LoginModel
<div class="accountHeader">
<h2>
Log In</h2>
<p>
Please enter your username and password. @Html.ActionLink("Register", "Register")
if you don't have an account.</p>
</div>
@using(Html.BeginForm()) {
@Html.DevExpress().Label(settings => {
settings.Name = "UserNameLabel";
settings.Text = "User Name";
settings.AssociatedControlName = "UserName";
}).GetHtml()
<div class="form-field">
@Html.EditorFor(m => m.UserName)
@Html.ValidationMessageFor(m => m.UserName)
</div>
@Html.DevExpress().Label(settings => {
settings.Name = "PasswordLabel";
settings.Text = "Password";
settings.AssociatedControlName = "Password";
}).GetHtml()
<div class="form-field">
@Html.EditorFor(m => m.Password)
@Html.ValidationMessageFor(m => m.Password)
</div>
<div class="form-field">
@Html.DevExpress().CheckBox(settings => {
settings.Name = "RememberMe";
settings.Text = "Remember me?";
}).GetHtml()
</div>
@Html.DevExpress().Button(settings => {
settings.Name = "Button";
settings.Text = "Log On";
settings.UseSubmitBehavior = true;
}).GetHtml()
}