2012-03-14 23 views
2

我想我可能在使用其他設備時使用了中繼器,因此我已經準備好將其設置爲設計,但我想檢查與改變這個之前的發展社區。從代碼隱藏的代碼中找出使用Repeater創建的標記中的控制值

我還應該說,我在aspx頁面的自定義用戶控件中使用此中繼器控件。

我的情況是,當用戶選擇一個項目時,我必須動態顯示附加部件的列表。這與您在網上結帳時有時會看到的「您可能還有興趣」列表類似。

因此,用戶可以從下拉列表中選擇要訂購的項目,最多可以添加4個附加部件。

目前,我正在將可選部件列表放入數據對象的通用列表中,並將其綁定到中繼器控件及其文本框。文本框基本上在一個框中列出部分描述,並且用戶可以在另一個文本框中輸入他們想要的項目數量的選項。

這一切都很好。

所以要清楚的是,在中繼器控件加載所有內容並呈現表單後,用戶可以在數量文本框中鍵入值。

因爲這都是用戶控制,所以我正在編寫一個方法來收集所有這些信息,填充一個業務對象,並將它返回給它的任何調用。

我無法找到自動生成的文本框,所以我可以檢索它們的值。

我有這種偷偷摸摸的嫌疑,我在做一些明顯錯誤的設計。所以我想通過蜂巢式的思維來看看別人怎麼看:)

這是我的標記,由中繼控制器生成。

<div class="base-container-controls-75pct">   
    <div class="base-container-controls-98pct"> 
    <div class="base-container-controls-75pct"> 
     <input name="DownLoadItem1$UxAdditionalParts$ctl01$UxItemNumber" type="text" id="DownLoadItem1_UxAdditionalParts_ctl01_UxItemNumber" class="textbox-readonly-xl" /> 
    </div> 
    <div class="base-container-controls-10pct"> 
     <input name="DownLoadItem1$UxAdditionalParts$ctl01$UxQuantity" type="text" value="3" id="DownLoadItem1_UxAdditionalParts_ctl01_UxQuantity" class="textbox-md" /> 
    </div> 
    </div> 

    ... more repeating code here, basically the 98pct div above is repeated for each "row" ... 

</div> 
+0

我最終將EnableViewState =「True」添加到中繼器的標記中,然後我可以通過控件循環。我會盡快發佈解決方案代碼:) – 2012-03-14 18:49:26

回答

2

我基本上是在將各種東西拼湊在一起,閱讀各種其他帖子後想到的。

我缺少的是,我需要添加[EnableViewState =「True」]到我的轉發器的標記。所以,我的標記低於:

<asp:Repeater ID="UxAdditionalParts" runat="server" OnItemDataBound="UxAdditionalPartsItemDataBound" EnableViewState="True"> 
    <HeaderTemplate> 
    </HeaderTemplate> 
    <ItemTemplate> 
    <div class="base-container-controls-98pct"> 
     <div class="base-container-controls-75pct"> 
      <asp:TextBox ID="UxItemNumber" runat="server" CssClass="textbox-readonly-xl"></asp:TextBox> 
     </div> 
     <div class="base-container-controls-10pct"> 
       <asp:TextBox ID="UxQuantity" runat="server" CssClass="textbox-md"></asp:TextBox> 
     </div> 
    </div> 
    </ItemTemplate> 
    <FooterTemplate> 
    </FooterTemplate> 
</asp:Repeater> 

一旦這樣做,我可以簡單地通過如我所料,並抓住他們的價值觀,建設我從他們的對象列表中的控制迴路。這是怎麼回事:

// Find all textboxes, looping through them to build an object list. Generally there is a maximum of 4 parts 
// associated here but there could be more in the future so this should expand too. 
for (int j = 0; j <= UxAdditionalParts.Items.Count - 1; j++) 
    { 
     if (UxAdditionalParts.Items[j].ItemType == ListItemType.Item || UxAdditionalParts.Items[j].ItemType == ListItemType.AlternatingItem) 
      { 
       TextBox txtItm = (TextBox)UxAdditionalParts.Items[j].FindControl("UxItemNumber"); 
       TextBox txtQty = (TextBox)UxAdditionalParts.Items[j].FindControl("UxQuantity"); 
       if (txtItm != null & txtQty != null) 
       { 
        // Create a new part and add it to our list. 
        AdditionalPart objAdditionalPart = new AdditionalPart(); 
        objAdditionalPart.ItemNumber = txtItm.Text; 
        objAdditionalPart.Quantity = Convert.ToInt32(txtQty.Text) ; 
        loAdditionalParts.Add(objAdditionalPart); 
       } 
      } 
     } 

神祕解決了!