私のコントローラのアクション:ModelStateとAddModelErrorはコントローラ/アクション内に永続化されていますか?
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Login()
{
return View();
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Login(string UserName, string Password, bool RememberMe)
{
var userNameValidationResults = _validatorProvider.Validate<IMailAddressValidator>(UserName);
foreach (var result in userNameValidationResults.Where(r => !r.Passed)) {
ModelState.AddModelError("UserName", result.ErrorMessage);
}
var passwordValidationResults = _validatorProvider.Validate<IStringLengthValidator>(Password);
foreach (var result in passwordValidationResults.Where(r => !r.Passed)) {
ModelState.AddModelError("Password", "Please enter a password.");
}
if (!ModelState.IsValid)
return View();
bool validUser = _userMembershipService.ValidateUser(UserName, Password);
if (!validUser) {
ModelState.AddModelError("_FORM", "Invalid e-mail address and/or password.");
return View();
}
_userAuthenicationService.Login(UserName, RememberMe);
return RedirectToAction("Index", "Home");
}
マイビュー:
<h2>Login</h2>
<%= Html.ValidationSummary() %>
<% using (Html.BeginForm()) { %>
<%= Html.TextBox("UserName") %>
<%= Html.Password("Password") %>
<%= Html.CheckBox("RememberMe") %>
<input type="submit" value="Login" />
<% } %>
私は、検証エラーが発生した後、再びフォームを送信した場合、私はValidationSummary
に別のエラー(同じ正確なエラー)を取得します。なぜそれが起こっているのですか?ありがとう。私は何を意味
編集は、私はn
が応募の数であるエラーのn
個を持っているということです。
編集2 現在、私は問題が残っているように見えますが、フォームフィールドの値は変更されません。上記のコードを更新しました。また、私はCastle WindsorをIoCコンテナに使用していますが、それが私の問題の原因になるとは思いません。しかし、それが可能な場合は、ここでコントローラを登録するために使用しているソースがあります。
container.Register(
AllTypes
.FromAssemblyNamed("Aplication")
.BasedOn<IController>()
.Where(t => t.Name.EndsWith("Controller"))
.Configure(c => c.LifeStyle.Is(LifestyleType.Transient))
.WithService
.FirstInterface()
);
あなたはその質問を説明できますか? 「フォームを提出する」ことは何を意味しますか?おそらく、まずModelStateでエラーをクリアする必要があります。 –
バリデータが2回目に再度エラーを生成していないことを確認していますか? ModelStateとエラーは呼び出し間で保持されません。 フォームのHTMLコードを投稿できますか? –
私はループ制御のチェックに 'break; 'をつけているので、そうしてはいけません。 –