我的控制器操作:ModelState和AddModelError在Controller/Action中是否持久?
[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中清除錯誤。 – 2009-06-11 16:33:45
你確定你的驗證器第二次沒有再次產生錯誤嗎? 模型狀態和錯誤不會在調用之間持續存在。 你能發佈表單html代碼嗎? – 2009-06-11 17:05:21