总结起来,这段代码将Jquery自动完成添加到位于UpdatePanel内部的Asp.Net Formview内的文本框中。
以下代码没有任何问题,除非InsuranceInsertItemTextBox为null,当Formview处于只读模式时总是如此。如果控件为null,我尝试使用if语句终止函数,但这不起作用。如果将Formview模式设置为readonly,我也尝试终止该语句,但这也不起作用。有关处理此错误的任何建议吗? 仅供参考:LINE 33(在堆栈跟踪中标识)是InitAutoCompl函数内部的if语句。如果我删除if语句,则错误转到下一行。
$(document).ready(function () {
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_initializeRequest(InitializeRequest);
prm.add_endRequest(EndRequest);
InitAutoCompl();
});
function InitializeRequest(sender, args) {
}
function EndRequest(sender, args) {
InitAutoCompl();
} function InitAutoCompl(freeInput) {
if (!document.getElementById('<%= CaseInformationFormView.FindControl("InsuranceInsertItemTextBox").ClientID %>'))return;
$('#<%= CaseInformationFormView.FindControl("InsuranceInsertItemTextBox").ClientID %>').autocomplete({
source: function(request, response) {
$.ajax({
url: '<%= Page.ResolveUrl("PacketsForUpload.aspx/GetInsuranceCompanies") %>',
data: "{ 'prefix': '" + request.term + "'}",
dataType: "json",
type: "POST",
contentType: "application/json; charset=utf-8",
messages: {
noResults: '',
results: function() {}
},
success: function(data) {
response($.map(data.d, function(item) {
return {
label: item.split("-")[0],
val: item.split("-")[1]
};
}));
},
error: function(response) {
alert(response.responseText);
},
failure: function(response) {
alert(response.responseText);
}
});
},
change: function(e, ui) {
if (!(freeInput || ui.item)) e.target.value = "";
Page_ClientValidate();
},
select: function(e, i) {
console.log("i.item", i.item);
Page_ClientValidate();
},
minLength: 3
});
};
堆栈追踪:
[NullReferenceException: Object reference not set to an instance of an object.]
ASP.packetsforupload_aspx.__RenderPacketsHeadContent(HtmlTextWriter __w, Control parameterContainer) in :33
System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +268
System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +8
System.Web.UI.Control.Render(HtmlTextWriter writer) +10
System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +57
System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +100
System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +25
System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +128
System.Web.UI.HtmlControls.HtmlHead.RenderChildren(HtmlTextWriter writer) +21
System.Web.UI.HtmlControls.HtmlContainerControl.Render(HtmlTextWriter writer) +32
System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +57
System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +100
System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +25
System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +128
System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +8
System.Web.UI.Control.Render(HtmlTextWriter writer) +10
System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +57
System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +100
System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +25
System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +128
System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +8
System.Web.UI.Page.Render(HtmlTextWriter writer) +29
System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +57
System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +100
System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +25
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1386
编辑: 另外,我只是想通了返回不会破坏功能。我通过删除if语句并在那里返回来测试这个。错误仍然存在。
答案 0 :(得分:2)
如果控制&#39; InsuranceInsertItemTextBox&#39;不是CaseInformationFormView的子控件,那么CaseInformationFormView.FindControl(&#34; InsuranceInsertItemTextBox&#34;)为null,调用属性ClientID将生成NRE。
您可以通过在获取ClientID之前检查控件是否可用来防范此情况:
function InitAutoCompl(freeInput) {
$('#<%= CaseInformationFormView.FindControl("InsuranceInsertItemTextBox") != null ?CaseInformationFormView.FindControl("InsuranceInsertItemTextBox").ClientID : "" %>').autocomplete({
source: function (request, response) {
$.ajax({
url: '<%= Page.ResolveUrl("PacketsForUpload.aspx/GetInsuranceCompanies") %>',
data: "{ 'prefix': '" + request.term + "'}",
dataType: "json",
type: "POST",
contentType: "application/json; charset=utf-8",
messages: {
noResults: '',
results: function () { }
},
success: function (data) {
response($.map(data.d, function (item) {
return {
label: item.split("-")[0],
val: item.split("-")[1]
};
}));
},
error: function (response) {
alert(response.responseText);
},
failure: function (response) {
alert(response.responseText);
}
});
},
change: function (e, ui) {
if (!(freeInput || ui.item)) e.target.value = "";
Page_ClientValidate();
},
select: function (e, i) {
console.log("i.item", i.item);
Page_ClientValidate();
},
minLength: 3
});
};