System.NullReferenceException:未将对象引用设置为对象的实例

时间:2013-06-27 19:57:34

标签: c# asp.net visual-studio-2008 nullreferenceexception loginview

我正在使用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:未将对象引用设置为对象的实例。

3 个答案:

答案 0 :(得分:1)

很可能在执行时,用户未登录 - 因此无法使用Foo的ID进行控制,因此FindControl正在返回null。您应该检测用户是否已单独登录并要求正确控制,或在使用之前检查Foo是否为null。 (您可能需要考虑将本地变量重命名为foo,以便更符合C#约定。)

答案 1 :(得分:0)

试试这个:

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

现在您不会收到错误,但如果Foo为空,那么您的标签文本将不会更新。您需要确定无法找到名为“Foo”的Label的原因。

答案 2 :(得分:0)

您需要检查空值:

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