具有动态UC的中继器

时间:2018-03-06 15:25:43

标签: asp.net data-binding repeater

我有动态数据和UC的公式。

我的ascx文件如下:

<asp:Repeater ID="rMyData" runat="server" OnItemDataBound="OnRepeaterItemDataBound">
    <ItemTemplate>
        <asp:Panel ID="panelAdditional" runat="server"/>
    </ItemTemplate>
</asp:Repeater>

和cs文件:

public partial class MyFormular
{

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                PrepareList();
                DataBind();
            }
        }

        private void PrepareList()
        {
            rMyData.DataSource = GetData();
            rMyData.DataBind();
        }

        protected void OnRepeaterItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            RepeaterItem repeaterItem = e.Item;
            Panel panel = (Panel)repeaterItem.FindControl("panelAdditional");
            if (panel != null)
            {
                var datarow= (Data)repeaterItem.DataItem;

                if (datarow!= null)
                {
                    panel.Controls.Clear();

                    MyUC ctrl;
                    ctrl = (MyUC)Page.LoadControl("~/MyUC.ascx");
                    ctrl.Enabled = true;
                    ctrl.DataRow = datarow;
                    panel.Controls.Add(ctrl);
                }
            }
        }

        protected void SaveNewsletterSubscription(object sender, EventArgs e)
        {
        ...
        }
    }

我的问题是,它没有显示我的UC。 如果我把我的PrepareList()和DataBind()放在PostBack之外,它可以很好地运行并显示我的UC。但是在我按下保存按钮后,它会重新加载页面并重新绑定我的转发器。所以我在UC中失去了一切。 为什么它只显示我的UC如果我在每个页面加载中重新绑定它? 我希望我发布了足够的信息。

0 个答案:

没有答案