2010-01-27 4 views
0

Je suis confronté à un problème avec les pages maîtres imbriquées dans Asp.net MVC 2.0. Lorsque vous utilisez un maître normal (non imbriqué - en dessous de default.master), la fonctionnalité de connexion fonctionne correctement. En utilisant le maître imbriqué, le post de formulaire ajax aboutit à un rendu complet de la page default.master dans la div UpdateTarget. Puisque dans ce cas le maître référé est twocolumn.master cela n'a aucun sens.Pages maîtres imbriquées MVC et RenderPartial avec formulaire Ajax

Des idées ou des suggestions?

Configuration & code:

default.master:

<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head runat="server"> 
     <title> 
      <asp:ContentPlaceHolder ID="TitleTagContent" runat="server" /> 
     </title> 
     <!--script includes --> 
    </head> 
    <body> 
     <div id="main"> 
      <div id="header"> 
       <div id="brand"> 
        <a href="#"> 
         <img src="/content/site_images/lgo_justProud.gif" width="264" height="62" alt="Just Proud" /></a></div> 
       <div id="logMenu" class="noPrint"> 
        <asp:ContentPlaceHolder ID="LoginContentArea" runat="server"> 
         <div id="login"> 
          <%if (SessionHelper.LoggedInUser == null) 
         { 
          Html.RenderPartial("UserNamePasswordLogin", null); 

         } 
         else 
         { 
          Html.RenderPartial("UserLoginStatus", null);        
         }; %> 
         </div> 
        </asp:ContentPlaceHolder> 
<asp:ContentPlaceHolder ID="Content_MainZone" runat="server"> 
      </asp:ContentPlaceHolder> 
</div> 
    </div> 
</body> 
</html> 

TwoColumn.master:

<asp:Content ID="Content1" ContentPlaceHolderID="Content_MainZone" runat="server"> 
    <div class="bodyTop"> 
    </div> 
    <div class="headerSmall"> 
     <h1> 
      <asp:ContentPlaceHolder ID="Content_SubTitle" runat="server"> 
      </asp:ContentPlaceHolder> 
     </h1> 
    </div> 
    <div class="twoColumns"> 
     <div class="contentLeft"> 

       <asp:ContentPlaceHolder ID="Content_MainLeft" runat="server"> 
       </asp:ContentPlaceHolder> 
     </div> 
     <div class="contentRight"> 

       <asp:ContentPlaceHolder ID="Content_MainRight" runat="server"> 
       </asp:ContentPlaceHolder> 

     </div> 
     <div class="clearfloats" /> 


    </div> 
</asp:Content> 
<asp:Content ContentPlaceHolderID="HeadTagContent" ID="Content2" runat="server"> 
    <asp:ContentPlaceHolder ID="HeadTagContent" runat="server"> 
    </asp:ContentPlaceHolder> 
</asp:Content> 
<asp:Content ContentPlaceHolderID="TitleTagContent" ID="Content3" runat="server"> 
    <asp:ContentPlaceHolder ID="TitleTagContent" runat="server"> 
    </asp:ContentPlaceHolder> 
</asp:Content> 

UserNamePasswordLogin.ascx:

<div class="notLoggedIn"> 
<%using (Ajax.BeginForm("Login", "Authentication", new AjaxOptions() { UpdateTargetId = "login" })) 
    { %> 

    <%=Html.ValidationSummary()%> 


<table cellpadding="0" cellspacing="0"> 
    <tr> 
     <td class="username" colspan="2"> 
      <%--<input name="username" type="text" value="username" size="12" />--%> 
      <%=Html.TextBox("username", null, new { size = "12" })%> 
      <%=Html.ValidationMessage("username", "*")%> 
     </td> 
     <td class="password"> 
      <%--<input name="password" type="text" value="Password" size="12" />--%> 
      <%=Html.Password("password", null, new { size = "12" })%> 
      <%=Html.ValidationMessage("password", "*")%> 
     </td> 
     <td> 
      <%=Html.Hidden("returnUrl", Request.RawUrl)%> 
      <%-- <input type="button" value="Go" />--%> 
      <input type="submit" value="Login" />    
     </td> 
    </tr> 
    <tr> 
     <td> 
      <div class="checkbox"> 
       <input name="rememberMe" type="checkbox" value="true" /> 
      </div> 
     </td> 
     <td class="usernameTxt" align="left" width="90"> 
      <span class="txt"> 
       <%=GlobalizationProperties.Labels.RememberMe%></span> 
     </td> 
     <td class="passwordTxt"> 
      <span class="txt"><a href="#">Forgot your pasword</a></span> 
     </td> 
    </tr> 
</table> 
<%};%> 

Connexion Action:

[HttpPost] 
    public ActionResult Login(string username, string password, bool? rememberMe, string returnUrl) 
    {    
     LoginDTO dto = new LoginDTO() { Login = username, Password = password, RememberMe = rememberMe }; 
     // Basic parameter validation 
     if (String.IsNullOrEmpty(username)) 
     { 
      ViewData.ModelState.AddModelError("username", GlobalizationProperties.ErrorMessages.LoginRequired); 
     } 
     if (String.IsNullOrEmpty(password)) 
     { 
      ViewData.ModelState.AddModelError("password", GlobalizationProperties.ErrorMessages.PasswordRequired); 
     } 


     if (ViewData.ModelState.IsValid) 
     { 
      bool loginSuccess = LoginHelper.PerformLogin(dto); 

      if (loginSuccess) 
      { 
       return JavaScript(string.Format("document.location.replace('{0}');", HttpUtility.HtmlEncode(returnUrl)));; 
      } 
      else 
      { 
       ViewData.ModelState.AddModelError("username", GlobalizationProperties.ErrorMessages.LoginPassNotFound); 
      } 
     } 

     ViewData["LoginForm"] = "LoginForm"; 

     return PartialView("UserNamePasswordLogin"); 

    } 

Cordialement, Bart

+0

Est-ce une page Master AJAX ou une page maître régulière? –

+0

Hi Nick, Page maître standard: Inherits = "System.Web.Mvc.ViewMasterPage" – BGR

Répondre

0

fixe en utilisant JQuery en place de régulier .net ajax

Questions connexes