登录控件不呈现布局模板下的html,只呈现服务器端控件,这是标记:
<asp:Login ID="Login11" EnableTheming="false" runat="server" MembershipProvider="SqlProvider"
OnLoginError="Login11_LoginError" LoginButtonType="Link">
<LayoutTemplate>
<div class="login-box">
<div>
<table cellpadding="10" cellspacing="0">
<tr>
<td>
User name:
</td>
<td>
<asp:TextBox ID="UserName" runat="server"></asp:TextBox>
</td>
</tr>
<tr>
<td>
Password:
</td>
<td>
<asp:TextBox ID="Password" runat="server" TextMode="Password"></asp:TextBox>
</td>
</tr>
<tr>
<td>
</td>
<td>
<a href="<%=Util.BaseUrl %>Pages/Account/ForgotPassword.aspx">Forgot Password?</a>
</td>
</tr>
<tr>
<td colspan="2">
<asp:CheckBox ID="RememberMe" runat="server" Text="Remember my password"></asp:CheckBox>
</td>
</tr>
</table>
</div>
<div>
<asp:LinkButton ID="LoginBtn" CommandName="Login" runat="server" CssClass="login-btn">Login</asp:LinkButton>
</div>
<div>
<asp:Literal ID="FailureText" runat="server"></asp:Literal>
</div>
</div>
</LayoutTemplate>
</asp:Login>
输出为:
<input name="ctl00$ContentPlaceHolder1$Login11$Password" id="ctl00_ContentPlaceHolder1_Login11_Password" type="password">
<input id="ctl00_ContentPlaceHolder1_Login11_RememberMe" name="ctl00$ContentPlaceHolder1$Login11$RememberMe" type="checkbox">
<label for="ctl00_ContentPlaceHolder1_Login11_RememberMe">Remember my password</label>
<a id="ctl00_ContentPlaceHolder1_Login11_LoginBtn" class="login-btn" href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$Login11$LoginBtn','')">Login</a>
为什么会这样?!
我也遇到了同样的问题,我几乎要疯了。直到我看到你的问题。然而,我并不是唯一一个偶然发现这种虫子的人。
我不知道为什么会发生这种情况,但你的问题包括解决方案(或者更好的方法)
我看到您在层次结构的顶部有一个div(class="login-box"
)。我想设置runat属性(runat="server"
)将解决这个问题。
至少我就是这么做的,只是我有一个表,而不是层次结构顶部的div。使表在服务器端运行(这意味着实际上有一个HtmlTable
控件添加到模板的Controls集合中),解决了这个问题,并且我不需要将该表下面的任何其他客户端元素设置为在服务器端执行。只有top元素需要runat属性。
删除以下内容后:
<%=Util.BaseUrl %>
从HTML标签
<a href="<%=Util.BaseUrl %>Pages/Account/ForgotPassword.aspx">Forgot Password?</a>
布局模板已正确呈现。