Nullref Exc. на этикетке, обнаруженной intellisense? - PullRequest
2 голосов
/ 02 февраля 2010

Хорошо, я довольно новичок в 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 ";
        }

    }
}

Я получаю исключение Nullref для MemberCreditLabel.Это обнаруживается с 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 Ответ

1 голос
/ 03 февраля 2010

Видимо, это по замыслу :

Это по замыслу. Элемент управления содержимым заменяет содержимое элемента управления заполнителя содержимого, который находится внутри шаблона. Таким образом, текстовое поле фактически внедряется в шаблон, и поэтому его нужно искать с помощью FindControl - прямой доступ не будет доступен.

Спасибо

Команда веб-платформ и инструментов.

Однако, используя рекурсивный FindControl, я не смог получить контроль над элементом внутри LoggedInTemplate - действительно, в разметке страницы ReSharper жаловался, что не может разрешить символ «LoginContentPlaceHolder» - т.е. он не мог правильно найти заполнитель содержимого на главной странице.

Есть ли способ показать кредиты на всех аутентифицированных страницах?

Или вы можете обернуть LoginView просто LoggedInTemplate, содержащим счетчик кредитов, в usercontrol и поместить его в заполнитель содержимого.

...