2011-12-05 73 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

相關問題