我在转发器中有一个 AutoCompleteExtender AjaxControlToolkit控件,需要从Web服务获取名称和值。自动完成字段需要存储名称,并且存在需要存储值的隐藏字段。当尝试在转发器之外执行此操作时,我通常会将事件 OnClientItemSelected 调用类似于
的javascript函数function GetItemId(source, eventArgs)
{
document.getElementById('<%= ddItemId.ClientID %>').value = eventArgs.get_value();
}
然而,由于值需要存储在转发器的控件中,我需要一些其他方法让javascript函数“获取”组件来存储值。
答案 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`
瞧