2011-12-05 41 views
2

我认为这是一个“卫生署”的时刻引起我没有几年圆顶的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(); 
} 

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

回答

5

绑定在Page_Init事件

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

是的 - 这是完成了工作..几乎。我在页面加载的其他地方也有一个厚脸皮的“Page.DataBind”,我需要删除这是导致问题,所以摆脱这似乎也排序所有:) –

+2

我从来没有过一个很好的经验的Page.DataBind。给它几年前提供:) – TheGeekYouNeed

3

一定要在页面加载中使用!Page.IsPostBack方法。 否则,Repeater将继续得到复位,所有的复选框 会在有默认值(未选中)

+2

如果我将该代码包装在IsPostBack检查中,则回发器上的转发器始终为空。如此处解释(http://stackoverflow.com/questions/2325980/why-is-the-asp-net-repeater-items-collection-empty-when-controls-are-on-the-scr) –

0

这应该修复它。您在回发时绑定了控件,因此失去了值。您可以在处理任何事件后将其绑定,以显示更新的记录。

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

根据以前的答案,这使得我的中继器“空”,因为中继器需要绑定在每一个职位(除非我失去了一些东西) –

+1

@MattRoberts,视图状态启用您的控制/页?我不会建议在'Page_Init'中这样做。这个问题可能是因为你的控件被绑定在代码的其他地方,这也是解决这个问题的原因 – Junaid

相关问题