2

さて、私はASP.NETとMasterPageの概念にまったく慣れていないので、理解できないエラーがあります.

これは私の default.aspx の一部です:

<asp:Content ID="ContentLoginContent" ContentPlaceHolderID="LoginContentPlaceHolder" runat="server">
<div id="ContentLoginDiv">
    You've got <asp:Label ID="MemberCreditLabel" runat="server" Text="0"></asp:Label> credits. 

</div>

これは、default.aspx.cs の関連部分です。

    public partial class _Default : System.Web.UI.Page
{
    protected void Page_Init(object sender, EventArgs e)
    {

    }
    protected void Page_Load(object sender, EventArgs e)
    {
        if (User.IsInRole("Authenticated"))
        {


            MemberCreditLabel.Text = "hello ";
        }

    }
}

MemberCreditLabel で Nullref 例外が発生します。IntelliSense で検出されます。問題は、ContentPlaceHolder「ContentLoginContent」がログイン時にのみ表示されることである可能性があると思います。これは私のMasterPageの一部です:

<asp:LoginView ID="MemberLoginView" runat="server">
            <AnonymousTemplate>
                <asp:Login ID="LogInBox" runat="server" Height="137px" style="margin-left: 0px" 
                    Width="16px">
                </asp:Login>    
            </AnonymousTemplate>
            <LoggedInTemplate>
                Welcome <asp:LoginName ID="MemberLoginName" runat="server" /> !
                <asp:LoginStatus ID="MemberLoginStatus" runat="server" />
               <asp:ContentPlaceHolder ID="LoginContentPlaceHolder" runat="server">
                 //Is this the problem?
               </asp:ContentPlaceHolder>
            </LoggedInTemplate>
          </asp:LoginView>

私がやりたいことは、データベースに保存されているクレジット額を表示することです。必要なデータを取得する機能は機能します。現在ログインしているユーザーのユーザー名を取得し、そのユーザーに関連付けられているクレジット額を取得したいと考えています。しかし、ラベルのこの奇妙なエラーは、私を完全に停止させます..おそらく、まだ遭遇していないMasterPagesの概念と関係があります. 何か案は?

4

1 に答える 1

1

どうやらこれは仕様によるものです

これは仕様によるものです。コンテンツ コントロールは、テンプレート内にある contentplaceholder コントロールのコンテンツを置き換えます。したがって、テキスト ボックスは実際にはテンプレートでインスタンス化されるため、FindControl を使用して検索する必要があります。直接アクセスすることはできません。

ありがとう、

WebPlatform およびツール チーム。

しかし、再帰的な FindControl を使用すると、LoggedInTemplate 内のコントロールを実際に取得できませんでした。実際、ページのマークアップで、ReSharper はシンボル「LoginContentPlaceHolder」を解決できないと不平を言っていました。つまり、解決できませんでした。 MasterPage でコンテンツ プレースホルダーが正しく見つからない。

すべての認証済みページにクレジットを表示する方法はありますか?

または、クレジット カウントを含む LoggedInTemplate だけで LoginView をユーザー コントロールにラップし、それをコンテンツ プレースホルダー内にドロップすることもできます。

于 2010-02-03T00:11:13.483 に答える