1

我正在使用 asp.net LoginView 向经过身份验证的用户和匿名用户显示不同的数据。

<asp:LoginView ID="LoginView1" Runat="server">
    <LoggedInTemplate>
        <asp:Label ID="Foo" runat="server" />
    </LoggedInTemplate>
    <AnonymousTemplate>
        <asp:Label ID="Bar" runat="server" />
    </AnonymousTemplate>
</asp:LoginView>

然后我在我的 c# 文件中访问这些标签,如下所示:

Label Foo = (Label)LoginView1.FindControl("Foo");
Foo.Text = "whatever";

我收到的错误是:

说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.NullReferenceException:对象引用未设置为对象的实例。

4

3 回答 3

1

好吧,大概在执行时,用户没有登录 - 所以没有 ID 的控件Foo,所以FindControl正在返回null。您应该单独检测用户是否登录并要求正确的控制,或者在使用之前检查Foo是否正确。null(您可能还需要考虑将局部变量重命名foo为更符合 C# 约定。)

于 2013-06-27T20:00:27.067 回答
0

您需要检查空值:

object labelObj = LoginView1.FindControl("Foo")
if(labelObj != null)
{
    Label Foo = (Label)labelObj;
    if(Foo.Text!=null)
        Foo.Text="whatever";
}
于 2013-06-27T20:08:07.013 回答
0

尝试这个:

Label Foo = (Label)LoginView1.FindControl("Foo");
if(Foo != null)
{
    Foo.Text = "whatever";
}

现在您不会收到错误消息,但如果Foo为 null,则标签的文本将不会更新。您需要确定为什么它找不到Label命名的“Foo”。

于 2013-06-27T20:00:57.060 回答