ASP.NET登录控件:仅呈现服务器端控件而不包括HTML

3

登录控件不会呈现布局模板下的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>

为什么会发生这种情况?!

如果将属性EnableTheming设置为true,会发生什么? - balexandre
看起来您缺少一些配置,我刚刚尝试了一个简单的Web表单页面,它正常工作... - balexandre
是的,它必须运行,但我无法配置缺少了什么。 - amd
你的登录控件是否在带有runat="server"属性的表单标签内? - slfan
@slfan 是的,它在一个运行在服务器上的 contentHolder 中。 - amd
2
谢谢大家,我解决了问题,问题出在我在LayoutTemplate中使用了服务器标签<%=Util.BaseUrl%>。 - amd
2个回答

1

我曾经遇到过同样的问题,几乎要发疯了。直到看到了你的问题,我才意识到我不是唯一一个遇到这个 bug 的人。

我不知道为什么会出现这种情况,但是你的问题包含了解决方案(或者更好的说,解决方法)

我看到你在层次结构的顶部有一个 div(class="login-box")。我想设置 runat 属性(runat="server")将解决这个问题。

至少我是这样做的,只不过我在层次结构的顶部有一个表格而已。让表格在服务器端运行(也就是在模板的 Controls 集合中添加了一个 HtmlTable 控件),就可以解决问题了,我不需要设置任何其他客户端元素在这个表格下面运行在服务器端。只有顶部元素需要设置 runat 属性。


0

移除以下内容后:

<%=Util.BaseUrl %>

从HTML标签

<a href="<%=Util.BaseUrl %>Pages/Account/ForgotPassword.aspx">Forgot Password?</a>

布局模板已正确渲染。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接