Nullref Exc。在intellisense检测到的标签上?

时间:2010-02-02 17:06:43

标签: c# asp.net nullreferenceexception master-pages

好的,所以我对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的概念有关,我还没有偶然发现。有任何想法吗?

1 个答案:

答案 0 :(得分:1)

显然这是by design

  

这是设计的。内容控件替换模板内的contentplaceholder控件的内容。因此,文本框实际上在模板中实例化,因此需要使用FindControl进行查找 - 直接访问将无法使用。

     

谢谢,

     

WebPlatform和工具团队。

然而,使用递归的FindControl,我无法真正掌握LoggedInTemplate中的控件 - 实际上在Page的标记中,ReSharper抱怨它无法解析符号“LoginContentPlaceHolder” - 即它无法在MasterPage上正确找到内容占位符。

有没有办法可以在所有经过验证的页面上显示学分?

或者,您可以使用包含信用计数的LoggedInTemplate将LoginView包装到usercontrol中,并将其放在内容占位符中。