2009-02-18 48 views
2

我有一個AutoCompleteExtender AjaxControlToolkit控制在中繼器中,需要從Web服務中獲取名稱和值。 auto complete字段需要存儲名稱,並且存在需要存儲該值的隱藏字段。當試圖做到這一點的中繼器之外,我通常有事件OnClientItemSelected調用JavaScript功能類同中繼器中的AutoCompleteExtender控制

function GetItemId(source, eventArgs) 
{ 
    document.getElementById('<%= ddItemId.ClientID %>').value = eventArgs.get_value(); 
} 

但是因爲該值需要被存儲在控制一箇中繼器中我需要一些其他的方式javascript函數「獲取」組件以存儲值。

回答

1

我有一些JavaScript可能會幫助你。我的ASP.Net自動完成擴展器不在中繼器中,但我修改了代碼來檢測您將要編寫代碼的TextBox的ID,它應該可以工作(但我沒有一直測試它通過回發)。 在客戶端ItemSelected方法中使用來自'source'參數的值。這是調用AutoComplete擴展器的ID。只要確保在Repeater Item中爲隱藏的TextBox分配了一個ID,這與擴展器的ID類似。 事情是這樣的:

<asp:Repeater ID="RepeaterCompareItems" runat="server"> 
    <ItemTemplate> 
     <ajaxToolkit:AutoCompleteExtender runat="server" 
      ID="ACE_Item" 
      TargetControlID="ACE_Item_Input" 
      ...other properties... 
      OnClientItemSelected="ACEUpdate_RepeaterItems" /> 
     <asp:TextBox ID="ACE_Item_Input" runat="server" /> 
     <asp:TextBox ID="ACE_Item_IDValue" runat="server" style="display: none;" /> 
    </ItemTemplate> 
</asp:Repeater> 

然後JS方法是這樣的:

function ACEUpdate_CustomerEmail(source, eventArgs) { 
      UpdateTextBox = document.getElementById(source.get_id() + '_IDValue'); 
      //alert('debug = ' + UserIDTextBox); 
      UpdateTextBox.value = eventArgs.get_value(); 
      //alert('customer id = ' + UpdateTextBox.value); 
     } 

有額外的警報方法調用,您可以取消用於測試和刪除進行生產。在一個簡單而不完整的測試頁面中,我得到了如下所示的ID:RepeaterCompareItems_ctl06_ACE_Item_IDValue(用於存儲值的文本框)和RepeaterCompareItems_ctl07_ACE_Item(用於AC擴展器) - 您可能有點不同,但看起來很實用。 祝你好運。

0

由於您使用一箇中繼器,我建議接線OnItemDataBound功能...

< ASP:基站ID = 「rptResults」 OnItemDataBound = 「FormatResults」 RUNAT = 「服務器」>

<的ItemTemplate>

< ASP:佔位符的id = 「phResults」 RUNAT = 「服務器」/>

</ItemTemplate中>

</ASP:中繼>

在後面使用類似

`私人小組FormatResults(BYVAL發件人爲對象,BYVALË作爲RepeaterItemEventArgs)

昏暗博士代碼

然後作爲的DataRow = CTYPE (CType(e.Item.DataItem,DataRowView).Row,DataRow)'可以訪問綁定到ex的所有數據。 dr(「ID」)。ToString

Dim ph As PlaceHolder = CType(e.Item。的FindControl( 「phResults」),佔位符)

'編程創建AutoCompleteExtender & &組屬性

' 編程創建按鈕火災所需的JavaScript

「使用「ph.Controls.Add(CTRL)對照添加到佔位符

結束Sub`

1

如果我正確地理解了這個問題,你應該可以做你通常做的事情,但不是嵌入ClientId,而是使用'source'參數。這應該允許你訪問你想要更新的控件。