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
Est-ce une page Master AJAX ou une page maître régulière? –
Hi Nick, Page maître standard: Inherits = "System.Web.Mvc.ViewMasterPage" – BGR