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ます。ユーザーがログインしているかどうかを個別に検出して適切なコントロールを要求するか、使用する前に確認する必要Foonullあります。(ローカル変数の名前を変更してfoo、C# の規則に合わせることも検討してください。)

于 2013-06-27T20:00:27.067 に答える
0

これを試して:

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

これでエラーは発生しなくなりますが、Fooが null の場合、ラベルのテキストは更新されません。Label名前付きの「Foo」が見つからない理由を特定する必要があります。

于 2013-06-27T20:00:57.060 に答える
0

null を確認する必要があります。

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 に答える