Vb.net VB WebMethod返回值,但jQuery自动完成不显示它们
我有一个vb.net网页,上面有一个asp文本框,我正在尝试将jquery autocomplete附加到该文本框。调试器向我显示,在文本框中键入将调用代码隐藏中的相关webmethod。这将调用另一个使用LINQtoSQL获取结果的方法,然后返回这些结果,然后。。。没有什么VS调试器显示从webmethod成功返回的正确结果,浏览器控制台不显示任何错误,但自动完成从不显示建议 代码隐藏文件和jquery之间的建议发生了什么变化 自动完成 网络方法 文本框Vb.net VB WebMethod返回值,但jQuery自动完成不显示它们,vb.net,jquery-autocomplete,Vb.net,Jquery Autocomplete,我有一个vb.net网页,上面有一个asp文本框,我正在尝试将jquery autocomplete附加到该文本框。调试器向我显示,在文本框中键入将调用代码隐藏中的相关webmethod。这将调用另一个使用LINQtoSQL获取结果的方法,然后返回这些结果,然后。。。没有什么VS调试器显示从webmethod成功返回的正确结果,浏览器控制台不显示任何错误,但自动完成从不显示建议 代码隐藏文件和jquery之间的建议发生了什么变化 自动完成 网络方法 文本框 您使用autocomplete时出错,
您使用autocomplete时出错,这就是解决方法:
var submitOK = false;
var searchURL = null;
var checkURL = null;
var autocomplete_fieldname = null;
function autocomplete(fieldName, ajaxURL_getList, ajaxURL_checkInput, formID)
{
searchURL = ajaxURL_getList;
checkURL = ajaxURL_checkInput;
autocomplete_fieldname = fieldName;
var txtField = $(":text[name='" + fieldName + "']");
txtField.autocomplete({delay : 50, minLength : 1, search : search, source : searchURL + txtField.val()});
$("form#" + formID).on("submit", _submit);
}
function search()
{
//console.log("changed");
var me = $(":text[name='" + autocomplete_fieldname + "']");
var val = me.val();
me.autocomplete("option", "source", searchURL + val);
}
function _submit(evt)
{
var txtField = $(":text[name='" + autocomplete_fieldname + "']");
jQuery.ajaxSetup({async:false});
var xhr = jQuery.getJSON(checkURL + txtField.val() , null, submitResult);
jQuery.ajaxSetup({async:true});
return submitOK;
}
function submitResult(data)
{
var txtField = $(":text[name='" + autocomplete_fieldname + "']");
if(!data || data === "false" || data === false)
{
txtField.effect("shake");
submitOK = false;
}
else
{
submitOK = true;
}
}
然后在各个表单和字段上设置自动完成,如下所示:
autocomplete("MY_FORM_FIELD_NAME", "MY_AJAX_URL?GETLIST=", "MY_AJAX_URL?GETVALUE=", "MY_FORM_ID");
此脚本将拒绝在数据源中找不到的输入-这是一个非常好的验证,它还提供了强大的自动完成功能。你必须有jQuery用户界面,但我猜大多数使用jQuery的人也有jQ用户界面:结果问题中的代码工作正常,但从文本框中删除焦点会说,若要在Visual Studio中的断点上单击“继续”,将停止显示下拉列表。我首先要做的是在AJAX调用的成功函数中放置一个console.log,然后查看VB方法是否返回您期望的值。@DouglasBarbin看起来返回了一个正确值的数组:[value1,value2,value3,value4,value5]
<asp:UpdatePanel ID="upnlMain" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:TextBox ID="txtJobNumber" runat="server" MaxLength="7" Width="75px" CssClass="autoJobNum" />
</ContentTemplate>
</asp:UpdatePanel>
var submitOK = false;
var searchURL = null;
var checkURL = null;
var autocomplete_fieldname = null;
function autocomplete(fieldName, ajaxURL_getList, ajaxURL_checkInput, formID)
{
searchURL = ajaxURL_getList;
checkURL = ajaxURL_checkInput;
autocomplete_fieldname = fieldName;
var txtField = $(":text[name='" + fieldName + "']");
txtField.autocomplete({delay : 50, minLength : 1, search : search, source : searchURL + txtField.val()});
$("form#" + formID).on("submit", _submit);
}
function search()
{
//console.log("changed");
var me = $(":text[name='" + autocomplete_fieldname + "']");
var val = me.val();
me.autocomplete("option", "source", searchURL + val);
}
function _submit(evt)
{
var txtField = $(":text[name='" + autocomplete_fieldname + "']");
jQuery.ajaxSetup({async:false});
var xhr = jQuery.getJSON(checkURL + txtField.val() , null, submitResult);
jQuery.ajaxSetup({async:true});
return submitOK;
}
function submitResult(data)
{
var txtField = $(":text[name='" + autocomplete_fieldname + "']");
if(!data || data === "false" || data === false)
{
txtField.effect("shake");
submitOK = false;
}
else
{
submitOK = true;
}
}
autocomplete("MY_FORM_FIELD_NAME", "MY_AJAX_URL?GETLIST=", "MY_AJAX_URL?GETVALUE=", "MY_FORM_ID");