2009-10-12 83 views
3

我有一个名为LogOn的局部视图,其中我基本上将登录输入复制到控件中。我使用Html.RenderPartial放置在我的index.html控制的Ajax.BeginFormASP.NET MVC +模型状态和局部视图

<div id="login_ajaxtarget"> 
    <% using (Ajax.BeginForm("Logon", "Account", new AjaxOptions { UpdateTargetId = "login_ajaxtarget", HttpMethod = "Post" })) { %> 

     <% Html.RenderPartial("LogOn"); %> 

    <% } %> 
     </div> 

我试图传回的验证消息的里面,让他们展示,但我似乎无法得到它的工作。我将模型传递给视图,但它似乎并未正确显示验证。

我控制器

public ActionResult LogOn(string userName, string password, bool rememberMe, string returnUrl) 
    { 

     if (!ValidateLogOn(userName, password)) 
     { 
      return PartialView("LogOn", ModelState); 
      //return RedirectToAction("Index", "Home"); 
     } 

     FormsAuth.SignIn(userName, rememberMe); 
     if (!String.IsNullOrEmpty(returnUrl)) 
     { 
      return Redirect(returnUrl); 
     } 
     else 
     { 
      return RedirectToAction("Index", "Home"); 
     } 
    } 

我的部分观点

<%= Html.ValidationSummary("Login was unsuccessful. Please correct the errors and try again.") %> 


     <div> 
      <fieldset> 
       <legend>Account Information</legend> 
       <p> 
        <label for="username">Username:</label> 
        <%= Html.TextBox("username") %> 
        <%= Html.ValidationMessage("username") %> 
       </p> 
       <p> 
        <label for="password">Password:</label> 
        <%= Html.Password("password") %> 
        <%= Html.ValidationMessage("password") %> 
       </p> 
       <p> 
        <%= Html.CheckBox("rememberMe") %> <label class="inline" for="rememberMe">Remember me?</label> 
       </p> 
       <p> 
        <input type="submit" value="Log On" /> 
       </p> 
      </fieldset> 
     </div> 

我想使用的建议,从这个线程(http://forums.asp.net/p/1398814/3023892.aspx#3023892),但林不知道这是否是正确的。我真正想要的是能够将LogOn功能放置在主页上,而不必导航到新页面才能使用它。如果有一个更简单的方法来做到这一点,我所有的耳朵!提前致谢。

回答

0

我觉得有些东西是必需的。您没有检查输入是否为空,也没有向模型状态添加任何错误消息。

// In your action add somethings like bellow. 

if (String.IsNullOrEmpty(userName)) 
    this.ModelState.AddModelError("UserName", "The username is required."); 

if (this.ModelState.IsValid) 
{ 
    // Do login 
} 

return PartialView("Login"); 
+0

对不起,我添加的代码是我迄今为止改变的代码。我已经实现了ValidateLogOn方法(或者更具体地说,它已经为我实现了)。我只是试图改变开始一个新的MVC项目时提供的开箱即用的网站模板。我的问题是,一旦错误被添加到模型中,它们就不会出现在我的页面的验证消息中。 – jimbo 2009-10-13 12:57:33

0

嘿男人真的很抱歉。我还没有看到默认的MVCApplication项目模板。

检查出来可能会解决你的问题。

控制:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %> 

<script src="../../Scripts/MicrosoftAjax.js" type="text/javascript"></script> 

<script src="../../Scripts/MicrosoftMvcAjax.js" type="text/javascript"></script> 

<%= Html.ValidationSummary("Login was unsuccessful. Please correct the errors and try again.") %> 
<% using (Ajax.BeginForm("LogOn", "Account", new AjaxOptions() { UpdateTargetId = "UpdatePanel" })) 
    { %> 
<div id="UpdatePanel"> 
    <fieldset> 
     <legend>Account Information</legend> 
     <p> 
      <label for="username"> 
       Username:</label> 
      <%= Html.TextBox("username") %> 
      <%= Html.ValidationMessage("username") %> 
     </p> 
     <p> 
      <label for="password"> 
       Password:</label> 
      <%= Html.Password("password") %> 
      <%= Html.ValidationMessage("password") %> 
     </p> 
     <p> 
      <%= Html.CheckBox("rememberMe") %> 
      <label class="inline" for="rememberMe"> 
       Remember me?</label> 
     </p> 
     <p> 
      <input type="submit" value="Log On" /> 
     </p> 
    </fieldset> 
</div> 
<% } %> 

代码:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult LogOn(string userName, string password, bool rememberMe, string returnUrl) 
{ 

    if (!ValidateLogOn(userName, password)) 
    { 
     return PartialView("Login"); 
    } 

    FormsAuth.SignIn(userName, rememberMe); 
    if (!String.IsNullOrEmpty(returnUrl)) 
    { 
     return Redirect(returnUrl); 
    } 
    else 
    { 
     return RedirectToAction("Index", "Home"); 
    } 
} 

这对我的作品。如果问题仍然存在,请通过Firebug查看回复和请求。

希望这可以帮助