转发器中的AutoCompleteExtender控件

时间:2009-02-18 16:47:55

标签: asp.net asp.net-ajax ajaxcontroltoolkit

我在转发器中有一个 AutoCompleteExtender AjaxControlToolkit控件,需要从Web服务获取名称和值。自动完成字段需要存储名称,并且存在需要存储值的隐藏字段。当尝试在转发器之外执行此操作时,我通常会将事件 OnClientItemSelected 调用类似于

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

然而,由于值需要存储在转发器的控件中,我需要一些其他方法让javascript函数“获取”组件来存储值。

3 个答案:

答案 0 :(得分:1)

我有一些可能对您有帮助的JavaScript。我的ASP.Net自动完成扩展程序不在转发器中,但是我已经修改了该代码以检测要写入已转换ID的TextBox的ID,它应该可以工作(但我还没有测试过它通过回复)。 使用客户端ItemSelected方法中“source”参数的值。这是调用AutoComplete扩展程序的ID。只需确保在Repeater项中为隐藏的TextBox分配ID,该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 Extender) - 你的可能有点不同,但它看起来很实用。 祝你好运。

答案 1 :(得分:1)

如果我正确理解了问题,你应该能够做你通常做的事情,但是不要嵌入ClientId,而是使用'source'参数。这应该允许您访问要更新的控件。

答案 2 :(得分:0)

由于您使用的是Repeater,我建议连接OnItemDataBound函数......

&lt; asp:Repeater id =“rptResults”OnItemDataBound =“FormatResults”runat =“server”&gt;

&LT;&的ItemTemplate GT;

&lt; asp:PlaceHolder id =“phResults”runat =“server”/&gt;

&LT; / ItemTemplate中&GT;

&LT; / ASP:中继&GT;

然后在后面的代码中使用类似

的内容

`Private Sub FormatResults(ByVal sender As Object,ByVal e As RepeaterItemEventArgs)

Dim dr As DataRow = CType(CType(e.Item.DataItem,DataRowView).Row,DataRow)'使您可以访问绑定到行ex的所有数据。博士( “ID”)。的ToString

Dim ph As PlaceHolder = CType(e.Item.FindControl(“phResults”),PlaceHolder)

'以编程方式创建AutoCompleteExtender&amp;&amp;设置属性

'以编程方式创建触发所需JavaScript的按钮

'使用'ph.Controls.Add( ctrl )将控件添加到PlaceHolder

结束Sub`