2009-02-18 44 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'参数。这应该允许你访问你想要更新的控件。