回发后的asp.net中继器数据

本文关键字:net 中继器 数据 asp | 更新日期: 2023-09-27 18:29:23

在我的.ascx控件中:

<asp:Repeater ID="rptProducts" runat="server">
    <ItemTemplate>
        <asp:Label ID="lblProductName" runat="server">
            <%# Eval("Name") %>
        </asp:Label>
    </ItemTemplate>
</asp:Repeater>
<asp:Button ID="btnGo" runat="server" Text="Postback" onclick="btnGo_Click" />

在代码背后:

protected void Page_Load(object sender, EventArgs e)
{
    if(!this.IsPostBack){
        var products = (from p in context.Products
                        select p).Take(30);
        rptProducts.DataSource = products;
        rptProducts.DataBind();
    }
}

我想知道为什么我的中继器在我点击按钮后会丢失数据。(回发)

回发后的asp.net中继器数据

改为在OnInit中绑定Repeater

http://codinglifestyle.wordpress.com/2009/10/08/repeaters-and-lost-data-after-postback-viewstate/

编辑:我假设您正在处理UserControlLoad事件,该事件在PageLoad事件之后引发。动态控件最迟必须在Page_Load中创建。

http://forums.asp.net/t/1191194.aspx

所以要么在Page_Init中绑定你的中继器,要么-我建议:

提供一个类似BindData的公共函数,该函数可以从页面的加载事件中调用。这也是推荐的方式,因为页面是UserControl的控制器。

public void BindData()
{
    var products = (from p in context.Products
                    select p).Take(30);
    rptProducts.DataSource = products;
    rptProducts.DataBind();
}