2

好的,所以我对 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 异常。它被智能感知检测到。我认为问题可能是 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 的概念有关。有任何想法吗?

4

1 回答 1

1

显然这是设计使然:

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

谢谢,

Web 平台和工具团队。

但是,使用递归 FindControl,我实际上无法控制 LoggedInTemplate 中的控件——实际上是在页面的标记中,ReSharper 抱怨它无法解析符号“LoginContentPlaceHolder”——即它不能t 在 MasterPage 上正确找到内容占位符。

有什么方法可以在所有经过身份验证的页面上显示学分?

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

于 2010-02-03T00:11:13.483 回答