данные репитера asp.net после обратной передачи - PullRequest
4 голосов
/ 28 марта 2012

В моем контроле .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();
    }
}

И мне интересно, почему мой ретранслятор теряет свои данные после того, как я нажимаю эту кнопку. (постбэк)

1 Ответ

3 голосов
/ 28 марта 2012

Вместо этого Repeater in OnInit.

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

Edit : я предполагаю, что вы обрабатываете UserControlLoad событие, которое возникает после Page Load события.Динамические элементы управления должны быть созданы в 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();
}
...