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()在回发中被反弹()时,数据绑定表达式会从布局模板中丢失。以前的数据绑定表达式现在是模板中的静态文本。

当为列表视图禁用视图状态时它工作正常,但在这种情况下需要视图状态来维护分页和排序(我相信这些视图状态是必需的,但我还没有真正研究它,可能处于控制状态)。

我该怎么做才能让它工作?

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()listview 之后,我调用databind()了这两个控件(phHeader 和 phFooter)是 listview 的FindControl方法。

onLayoutCreated数据绑定控件在事件处理程序中不起作用。通常它会导致列表视图的布局模板内容的状态为 1 回发过期。

我认为打开或关闭视图状态对此解决方案/解决方法没有任何影响。

于 2012-11-26T05:27:34.837 回答