MVC3:无法使用Login PartialView将登录验证错误消息返回到Index.cshtml

时间:2012-07-09 15:54:02

标签: asp.net-mvc-3 validation authentication login asp.net-mvc-partialview

我是MVC的新手(在WebForms工作了2年)。我正在尝试使用我的Index.cshtml中的PartialView实现Login,如下所示:

@Html.Action("LogOnPartial")

如果用户名或密码不正确,被调用的方法将按预期到达此行:

ModelState.AddModelError("", "The user name or password provided is incorrect.");

因为它是局部视图,所以我将模型传递回Index.cshtml,如下所示,以显示“不正确”的条目:

// If we got this far, something failed, redisplay form
return View("Index", model);

然后Index.cshtml将调用@ Html.Action(“LogOnPartial”),然后触发这个:

[HttpPost]
public ActionResult LogOnPartial(LogOnModel model)
{
    return PartialView(model);
}

渲染后,“错误”条目将按预期保留在文本框中,但上面的错误消息“提供的用户名或密码不正确”。没有显示。我猜错误消息不会在上面的方法中传递。

如何从局部视图返回时显示错误消息?

感谢。


感谢Marks,您的建议非常有帮助。最初我已经在我的LogOnPartial.cshtml末尾包含了@ Html.ValidationSummary(),但不知何故错误消息没有出现在Index.cshtml中。现在我将@ Html.ValidationSummary()移动到Index.cshtml,如下所示:

@Html.Action("LogOnPartial")
@Html.ValidationSummary(true, "Login was unsuccessful. Please correct the errors and try again.")

现在它正常工作,我可以看到登录错误消息。

然而,现在我有另一个问题。我的Index.cshtml中有两个部分视图。一个用于LogOnPartial.cshtml,另一个用于SignUpPartial.cshtml(您可能需要查看用WebForms编写的www.iguardpayroll.com,您会看到左栏中有两个框:一个用于登录,另一个用于注册)。

除了在@ Html.Action(“LogOnPartial”)下面添加@ Html.ValidationSummary()之外,我还需要在@Html.Action(“SignUpPartial”)下添加它以显示错误注册过程引起的消息(例如电子邮件已经存在!)。但是,如果我这样做,同样的LogOn错误消息将在LogOn部分和SignUp部分下出现两次。

   <div>
      @Html.Action("LogOnPartial")
      @Html.ValidationSummary(true, "Login was unsuccessful. Please correct the errors and try again.")
    </div>
    <div>
      @Html.Action("SignUpPartial")
      @Html.ValidationSummary(true, "Sign Up was unsuccessful. Please correct the errors and try again.")   
    </div>

如何判断第一个@Html.ValidationSummary()仅显示与LogOnPartial相关的错误消息,而第二个@Html.ValidationSummary()仅显示注册错误消息?

1 个答案:

答案 0 :(得分:0)

您必须使用表单中的@Html.ValidationSummary()来显示模型验证错误。

实施例

@using(Html.BeginForm())
{
   @Html.ValidationSummary()
   .. fields
}