为什么我的转发器控件在回发时为空?

时间:2011-12-05 11:10:15

标签: asp.net webforms repeater

我认为这是一个“麻烦”的时刻,因为我几年没有使用WebForms开发。

我有一个转发器,其中包含一堆复选框:

<asp:Repeater EnableViewState="true" ID="IDTypesRepeater" runat="server" OnItemDataBound="IdTypesRepeaterItemDataBound">
                        <HeaderTemplate/>
                        <ItemTemplate>
                            <asp:CheckBox EnableViewState="true" ID="chkIdType" Text="<%# ((KeyValuePair<string,int>)Container.DataItem).Key %>" runat="server" />
                            <asp:HiddenField ID="idType" Value="<%# ((KeyValuePair<string,int>)Container.DataItem).Value %>" runat="server"/>
                            <br />
                        </ItemTemplate>
                        </asp:Repeater>

我需要获取后面代码中选中的复选框:

 foreach (RepeaterItem repeaterItem in IDTypesRepeater.Items)
        {
            if ( ((CheckBox)repeaterItem.FindControl("chkIdType")).Checked )
            {
                // Do something
            }
        }

但是在回发时,这段代码无效!我知道总是数据绑定转发器,所以我做到了这一点:

protected void Page_Load(object sender, EventArgs e)
{
    IDTypesRepeater.DataSource = DocTemplateHelper.GetApplicableIDTypes().Where(type => type.Value != 0);
    IDTypesRepeater.DataBind();
}

所以这会重新填充转发器,但更新代码永远不会找到任何选中的复选框..任何想法?

3 个答案:

答案 0 :(得分:5)

在Page_Init事件中绑定

protected void Page_Init(object sender, EventArgs e)
{
    IDTypesRepeater.DataSource = DocTemplateHelper.GetApplicableIDTypes().Where(type => type.Value != 0);
    IDTypesRepeater.DataBind();
}

答案 1 :(得分:3)

请务必在页面加载中使用!Page.IsPostBack方法。 否则,Repeater将继续重置,以及所有复选框 将在默认值(未选中)

答案 2 :(得分:0)

这应该解决它。您在回发时绑定控件,因此会丢失值。您可以在处理任何事件后绑定它以显示更新的记录。

protected void Page_Load(object sender, EventArgs e)
{
    if(!IsPostBack)
    {
      IDTypesRepeater.DataSource = DocTemplateHelper.GetApplicableIDTypes().Where(type => type.Value != 0);
      IDTypesRepeater.DataBind();
    }
}