【发布时间】:2010-11-02 04:46:45
【问题描述】:
我的控制器操作:
[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-number of errors 其中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 中清除错误。
-
您确定您的验证器不会再次生成错误吗? ModelState 和错误不会在调用之间持续存在。可以贴一下表单的html代码吗?
-
不应该,因为我使用
break;进行循环控制检查 -
当您说“再次提交表单”时,是否可以假设您不再提交完全相同的数据?
-
嗯,是的,也不是。可以一样,也可以不一样。
标签: c# asp.net-mvc modelstate