2

我有一个站点管理员,我正在添加一些控件,其中一个是一个以编程方式更新的标签。我不确定为什么在第二个示例中我无法引用该对象,如果我对站点主机中范围如何工作的理解是错误的。任何帮助将不胜感激!

这个“俱乐部名称”标签按预期工作

 <div class="main">
     <asp:Label ID="ClubName" runat="server"></asp:Label>
</div>

虽然这个没有(对象引用未设置为对象的实例)

<asp:LoginView ID="HeadLoginView" runat="server" EnableViewState="false">
                <AnonymousTemplate>
                    [ <a href="~/Account/Login.aspx" ID="HeadLoginStatus" runat="server">Log In</a> ]
                </AnonymousTemplate>
                <LoggedInTemplate>
                    Welcome <span class="bold"><asp:LoginName ID="HeadLoginName" runat="server" /></span>!
                    [ <asp:LoginStatus ID="HeadLoginStatus" runat="server" LogoutAction="Redirect" LogoutText="Log Out" LogoutPageUrl="~/"/> ]
                    <asp:Label ID="ClubName" runat="server" Text="Label"></asp:Label>
                </LoggedInTemplate>
 </asp:LoginView>

我的代码背后的代码很简单

public partial class SiteMaster : System.Web.UI.MasterPage
{
    protected void Page_Load(object sender, EventArgs e)
    {
        NameClub.Text = "hello";
    }

和异常错误:

 Object reference not set to an instance of an object.
 Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

 Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
4

2 回答 2

2
Label ClubName= HeadLoginView.FindControl("ClubName") as Label;
if(ClubName != null)
     ClubName.Text =   "hello";

您的 aspx 标签 ID 是ClubName,但在您的代码中您以NameClub. 无论如何,您不能直接访问 LoginView 中的控件。使用FindControl方法并获得如上的控件。

您最好阅读如何:按 ID 访问服务器控件

于 2013-08-16T04:05:37.500 回答
2

这已经得到了答案,但只是添加了一个对了解 LoginView 很重要的信息。

The `LoginView` control, when being added onto a page, at a certain time,
only one Template (anonymous or loggedIn ) is applied on the Control
instance, so at that time, we can only retrieve the reference of those
controls in the currently active template( This means we  can't access 
controls in the non-active template).

因此,最好确定用户是否已通过身份验证,然后使用LoginView.FindControl( stringId) 检索控件引用。否则我们将再次看到错误:Object reference not set to an instance of an object.

于 2013-08-16T04:48:04.180 回答