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