我试图使用以下Ajax AutoCompleteExtender:
<asp:TextBox runat="server" Width="300" ID="tbxItem" CssClass="NormalUpper" />
<asp:AutoCompleteExtender ID="autoCompleteExtenderItemName" runat="server"
MinimumPrefixLength="1" ServicePath="../Services/AutoCompleteSpecialOrders.asmx"
ServiceMethod="GetItems" CompletionInterval="100"
Enabled="True" TargetControlID="tbxItem" CompletionSetCount="15" UseContextKey="True"
EnableCaching="true" ShowOnlyCurrentWordInCompletionListItem="True"
CompletionListCssClass="dbaCompletionList"
CompletionListHighlightedItemCssClass="AutoExtenderHighlight"
CompletionListItemCssClass="AutoExtenderList" DelimiterCharacters="">
OnClientItemSelected="ItemSelected"
</asp:AutoCompleteExtender>
<asp:HiddenField runat="server" ID="hiddenItemId" />
我们正在使用母版页(asp.net 4.0),用户控件和UpdatePanel。我很难获得OnClientItemSelected =&#34; ItemSelected&#34; JavaScript / Jquery函数可以工作。这是ScriptManagerProxy:
<asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="server" >
<Scripts>
<asp:ScriptReference Path="../common/script/AutoExtend.js"/>
</Scripts>
</asp:ScriptManagerProxy>
以下是AutoExtend.js(JavaScript&amp; Jquery)的内容:
//function ItemSelected(sender, eventArgs) {
// var hdnValueId = "<%= hiddenItemId.ClientID %>";
// document.getElementById(hdnValueId).value = eventArgs.get_value();
// alert(hdnValueId.value);
// document.getElementById("tbxCatalogQty").focus();
// This try didn't work for me}
function ItemSelected(sender, e) {
var hdnValueId = $get('<%=hiddenItemId.ClientID %>');
hdnValueId.value = e.get_value();
alert(hdnValueId.value);
document.getElementById("tbxCatalogQty").focus();
} //Neither did this one.
警报会从我们的WebService下拉列表中显示正确的值!我似乎无法将隐藏字段设置为此值,因此我可以稍后在代码隐藏中使用它。它始终显示为&#34;&#34;在调试器中运行时。另外,.focus()方法并没有像我想的那样将焦点设置到tbxCatalogQty字段。我也用单引号尝试了这个并且也没有改变任何东西。
在我的代码背后,我尝试按如下方式访问隐藏字段而没有任何运气:
//var itemId = Request.Form[hiddenItemId.Value];
var itemId = hiddenItemId.Value;
我在那里看过几个类似的帖子:12838552&amp; 21978130.我没有看到他们提到使用母版页和用户控件以及UpdatePanel内部的任何内容(但不确定这会有什么不同)。
答案 0 :(得分:0)
在朋友的帮助下,他刚刚找到了解决方案。首先,我们做了一个JavaScript回发,传递了这样的值:
function ItemSelected(sender, e) {
var hdnValueId = $get('<%=hiddenItemId.ClientID %>');
hdnValueId.value = e.get_value();
window.__doPostBack('UpdatePanelOrdersDetails', hdnValueId.value);
}
然后,在包含AutoCompleteExtender的ASP:Panel中,我们添加了“Onload =”pnlInputCat_Load“参数。
<asp:Panel ID="pnlInputCat" runat="server" OnLoad="pnlInputCat_Load">
然后,在后面的代码中,我们添加了pnlInputCat_Load方法,如下所示:
protected void pnlInputCat_Load(object sender, EventArgs e)
{
var theId = Request["__EVENTARGUMENT"];
if (theId != null && !theId.Equals(string.Empty))
{
Session["ItemCode"] = Request["__EVENTARGUMENT"];
tbxCatalogQty.Focus();
}
}
当然可能有更好的方法来完成这项工作,但我现在将ItemCode放在会话变量中供以后访问,然后我可以将焦点设置在Catalog Qty文本框中。
感谢所有试图理解/回答上述问题的人。