好的,所以我对ASP.NET和MasterPage概念都很陌生,并且出现了一个我无法弄清楚的错误。
这是我的default.aspx:
的一部分<asp:Content ID="ContentLoginContent" ContentPlaceHolderID="LoginContentPlaceHolder" runat="server">
<div id="ContentLoginDiv">
You've got <asp:Label ID="MemberCreditLabel" runat="server" Text="0"></asp:Label> credits.
</div>
这是我的default.aspx.cs的相关部分:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Init(object sender, EventArgs e)
{
}
protected void Page_Load(object sender, EventArgs e)
{
if (User.IsInRole("Authenticated"))
{
MemberCreditLabel.Text = "hello ";
}
}
}
我在MemberCreditLabel上获得了Nullref异常。它可以通过intelliSense进行检测。我认为问题可能是ContentPlaceHolder“ContentLoginContent”仅在登录时显示。这是我的MasterPage的一部分:
<asp:LoginView ID="MemberLoginView" runat="server">
<AnonymousTemplate>
<asp:Login ID="LogInBox" runat="server" Height="137px" style="margin-left: 0px"
Width="16px">
</asp:Login>
</AnonymousTemplate>
<LoggedInTemplate>
Welcome <asp:LoginName ID="MemberLoginName" runat="server" /> !
<asp:LoginStatus ID="MemberLoginStatus" runat="server" />
<asp:ContentPlaceHolder ID="LoginContentPlaceHolder" runat="server">
//Is this the problem?
</asp:ContentPlaceHolder>
</LoggedInTemplate>
</asp:LoginView>
我想要做的是显示存储在数据库中的信用额度。用于检索我想要的数据的功能。我获取当前登录用户的用户名,并希望获得与用户关联的信用额度。但是标签上的这个奇怪的错误让我完全停止了......这可能与MasterPages的概念有关,我还没有偶然发现。有任何想法吗?
答案 0 :(得分:1)
显然这是by design:
这是设计的。内容控件替换模板内的contentplaceholder控件的内容。因此,文本框实际上在模板中实例化,因此需要使用FindControl进行查找 - 直接访问将无法使用。
谢谢,
WebPlatform和工具团队。
然而,使用递归的FindControl,我无法真正掌握LoggedInTemplate中的控件 - 实际上在Page的标记中,ReSharper抱怨它无法解析符号“LoginContentPlaceHolder” - 即它无法在MasterPage上正确找到内容占位符。
有没有办法可以在所有经过验证的页面上显示学分?
或者,您可以使用包含信用计数的LoggedInTemplate将LoginView包装到usercontrol中,并将其放在内容占位符中。