2

<%# PageProperty %>リストビューの LayoutTemplate 内でデータバインディング式 ( など) を使用しようとしています 。

私が見たリソース:

ListView の LayoutTemplate 内のコントロールにアクセスする

コード ビハインドのパブリック文字列を ListView の LayoutTemplate に取得する

http://forums.asp.net/p/1201992/3319344.aspx

http://www.codeproject.com/Articles/42962/Databind-Expression-in-ListView-LayoutTemplate

次の両方の方法を使用して、データバインディング式を初期データバインドで正常に機能させることができます。

protected void lvwExample_OnLayoutCreated(object sender, EventArgs e) {
       lvwExample.Controls[0].DataBind();          
}

protected void lvwExample_OnLayoutCreated(object sender, EventArgs e) {        
        ListView lv = lvwExample ;
        Control template = new Control();
        lv.LayoutTemplate.InstantiateIn(template);
        template.DataBind(); // resolve the problem
        // remove current layout (without databind expressions)
        lv.Controls.RemoveAt(0);
        //add again the layout but with databound content
        lv.Controls.Add(template);           

}

問題は、リストビューがポストバックで再バインド ( listView.DataBind()) されると、データバインディング式がレイアウト テンプレートから失われることです。以前はデータバインディング式であったものは、テンプレート内の静的テキストになりました。

リストビューでviewstateが無効になっている場合は正常に機能しますが、この場合、ページングとソートを維持するためにviewstateが必要です(これらにはviewstateが必要だと思いますが、実際には調べていません。制御状態である可能性があります)。

これを機能させるにはどうすればよいですか?

4

1 に答える 1

2

うまくいくように見える解決策/回避策があります。

私がしたことは、2つのサーバー側コントロール(プレースホルダー)内にレイアウトテンプレートの内容をラップすることでした

             <LayoutTemplate>
                <asp:PlaceHolder runat="server" ID="phHeader">  
                 ...          
                </asp:PlaceHolder>
                <asp:PlaceHolder runat="server" ID="itmPlaceholder"></asp:PlaceHolder>    <!-- ItemTemplate holder-->
                <asp:PlaceHolder runat="server" ID="phFooter">
                 ...
                </asp:PlaceHolder>
            </LayoutTemplate>

databind()リストビューを呼び出した後databind()、リストビューのメソッドであるこれらのコントロール(phHeaderとphFooter)の両方を呼び出しましたFindControl

onLayoutCreatedコントロールのデータバインディングは、イベントハンドラーでは機能しませんでした。通常、リストビューのレイアウトテンプレートコンテンツの状態は、1ポストバック古くなっています。

ビューステートがオンまたはオフであっても、このソリューション/回避策に影響はないと思います。

于 2012-11-26T05:27:34.837 に答える