在页面中调用 Web 服务后回发到服务器抛出错误
Postback to the server throws error after web service call in the page
我正在尝试使用 .asmx 页面和 ajax 调用 Javascript.
通过 Web 服务调用来完成 telerik 控件的所有服务器交互
在 Javascript 下拉菜单 OnChange 事件中,它通过获取 JSON 数据完美地工作,并且绑定良好,没有问题。
脚本:
<script type="text/javascript">
function getproduct_details(e) {
var product = $("#<%=cbo_productname.ClientID%>").val();
var final_product = product.replace(/\s/g, '&&');
//var cborejectrating = $find("<%= cbo_productname.ClientID%>");
//var product = cborejectrating.get_value();
var obj = {
product_name: final_product
};
if (product == "") {
$('#<%=hdnproduct_gid.ClientID%>').val("");
$('#<%=cboproductgroup.ClientID%>').val("");
$('#<%=txt_ProductCode.ClientID%>').val("");
$("[id*=cbo_productname]").val("");
$('#<%=hdnProductUOM.ClientID%>').val("");
$("[id*=txt_displayfield]").val("");
}
else {
$.ajax({
type: "POST",
url: "../ems_service/crm_service.asmx/product_details",
//data: '{product_name:"' + "'" + final_product + "'" + '"}',
data: JSON.stringify(obj),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
var obj = JSON.parse(data.d)
$('#<%=hdnproduct_gid.ClientID%>').val(obj[0].product_gid);
$('#<%=cboproductgroup.ClientID%>').val(obj[0].productgroup_gid);
$('#<%=txt_ProductCode.ClientID%>').val(obj[0].product_code);
$("[id*=txt_displayfield]").val(product);
$("[id*=cboUOM]").val(obj[0].productuom_name);
$('#<%=hdnProductUOM.ClientID%>').val(obj[0].productuom_gid);
jQuery.removeData();
},
failure: function () {
alert("Server Failure");
},
error: function () {
alert("Server Error");
}
});
}
}
</script>
Asmx 页面:
<WebMethod(Enablesession:=True), ScriptMethod(ResponseFormat:=ResponseFormat.Json, UseHttpGet:=False)> _
Public Function product_details(ByVal product_name As String)
objdbconn.OpenConn()
Dim product_value As String = Replace(Replace(product_name, "'", ""), " ", "")
msSQL = "Select distinct a.product_gid,a.product_code,a.productgroup_gid,d.productgroup_name,c.productuom_gid,c.productuom_name " & _
" from pmr_mst_tproduct a" & _
" left join pmr_mst_tproductuomclass b on a.productuomclass_gid = b.productuomclass_gid" & _
" left join pmr_mst_tproductuom c on a.productuomclass_gid= c.productuomclass_gid" & _
" left join pmr_mst_tproductgroup d on a.productgroup_gid=d.productgroup_gid" & _
" where a.product_name = '" & Replace(product_name, "&&", " ") & "' "
ds_table = objdbconn.GetDatatable(msSQL)
result = objcmn.DataTable2JSON(ds_table)
'data = "{'product_gid':'" + odjreader.Item("product_gid").ToString + "','product_code':'" + odjreader.Item("product_code").ToString + "','productgroup_gid':'" + odjreader.Item("productgroup_gid").ToString + "','productgroup_name':'" + odjreader.Item("productgroup_name").ToString + "','productuom_gid':'" + odjreader.Item("productuom_gid").ToString + "','productuom_name':'" + odjreader.Item("productuom_name").ToString + "'}"
objdbconn.CloseConn()
Return result
End Function
ASPX 页面:
<telerik:RadComboBox ID="cbo_productname" runat="server" AllowCustomText="true" DataTextField="product_name"
EnableItemCaching="true" ShowMoreResultsBox="true" EnableVirtualScrolling="true" OnChange="javascript:getproduct_details(this);"
MarkFirstMatch="true" Filter="StartsWith" DataValueField="product_gid" EmptyMessage="Select Product"
EnableLoadOnDemand="true" Width="85%" ItemsPerRequest="20" DataSourceID="ds_cboproduct"
EnableAutomaticLoadOnDemand="true" AutoPostBack="false" ZIndex="10000000" Skin="WebBlue">
</telerik:RadComboBox>
渲染HTML:
<input id="ctl00_Content_cbo_productname_Input" class="rcbInput rcbEmptyMessage" type="text" value="Select Product" name="ctl00$Content$cbo_productname" autocomplete="off">
OnChange事件触发后,页面所有服务器端回传报错如下:
使用 RadComboBox 客户端 API(set_value() 和 get_value())而不是 jQuery val() 方法。在这里阅读更多关于它们的信息:
对于 ASP.NET AJAX 控制的任何其他 Telerik UI 也是如此。可能你有一个 RadTextBox 或其他东西(堆栈跟踪通过父 RadInput class)所以你也应该使用它自己的 API 而不是 jQuery。根据您的代码,我想 cboproductgroup 是一个 RadComboBox,txt_ProductCode 是一个 RadTextBox,也许 txt_displayfield 和 cboUOM 也是。
我正在尝试使用 .asmx 页面和 ajax 调用 Javascript.
通过 Web 服务调用来完成 telerik 控件的所有服务器交互在 Javascript 下拉菜单 OnChange 事件中,它通过获取 JSON 数据完美地工作,并且绑定良好,没有问题。
脚本:
<script type="text/javascript">
function getproduct_details(e) {
var product = $("#<%=cbo_productname.ClientID%>").val();
var final_product = product.replace(/\s/g, '&&');
//var cborejectrating = $find("<%= cbo_productname.ClientID%>");
//var product = cborejectrating.get_value();
var obj = {
product_name: final_product
};
if (product == "") {
$('#<%=hdnproduct_gid.ClientID%>').val("");
$('#<%=cboproductgroup.ClientID%>').val("");
$('#<%=txt_ProductCode.ClientID%>').val("");
$("[id*=cbo_productname]").val("");
$('#<%=hdnProductUOM.ClientID%>').val("");
$("[id*=txt_displayfield]").val("");
}
else {
$.ajax({
type: "POST",
url: "../ems_service/crm_service.asmx/product_details",
//data: '{product_name:"' + "'" + final_product + "'" + '"}',
data: JSON.stringify(obj),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
var obj = JSON.parse(data.d)
$('#<%=hdnproduct_gid.ClientID%>').val(obj[0].product_gid);
$('#<%=cboproductgroup.ClientID%>').val(obj[0].productgroup_gid);
$('#<%=txt_ProductCode.ClientID%>').val(obj[0].product_code);
$("[id*=txt_displayfield]").val(product);
$("[id*=cboUOM]").val(obj[0].productuom_name);
$('#<%=hdnProductUOM.ClientID%>').val(obj[0].productuom_gid);
jQuery.removeData();
},
failure: function () {
alert("Server Failure");
},
error: function () {
alert("Server Error");
}
});
}
}
</script>
Asmx 页面:
<WebMethod(Enablesession:=True), ScriptMethod(ResponseFormat:=ResponseFormat.Json, UseHttpGet:=False)> _
Public Function product_details(ByVal product_name As String)
objdbconn.OpenConn()
Dim product_value As String = Replace(Replace(product_name, "'", ""), " ", "")
msSQL = "Select distinct a.product_gid,a.product_code,a.productgroup_gid,d.productgroup_name,c.productuom_gid,c.productuom_name " & _
" from pmr_mst_tproduct a" & _
" left join pmr_mst_tproductuomclass b on a.productuomclass_gid = b.productuomclass_gid" & _
" left join pmr_mst_tproductuom c on a.productuomclass_gid= c.productuomclass_gid" & _
" left join pmr_mst_tproductgroup d on a.productgroup_gid=d.productgroup_gid" & _
" where a.product_name = '" & Replace(product_name, "&&", " ") & "' "
ds_table = objdbconn.GetDatatable(msSQL)
result = objcmn.DataTable2JSON(ds_table)
'data = "{'product_gid':'" + odjreader.Item("product_gid").ToString + "','product_code':'" + odjreader.Item("product_code").ToString + "','productgroup_gid':'" + odjreader.Item("productgroup_gid").ToString + "','productgroup_name':'" + odjreader.Item("productgroup_name").ToString + "','productuom_gid':'" + odjreader.Item("productuom_gid").ToString + "','productuom_name':'" + odjreader.Item("productuom_name").ToString + "'}"
objdbconn.CloseConn()
Return result
End Function
ASPX 页面:
<telerik:RadComboBox ID="cbo_productname" runat="server" AllowCustomText="true" DataTextField="product_name"
EnableItemCaching="true" ShowMoreResultsBox="true" EnableVirtualScrolling="true" OnChange="javascript:getproduct_details(this);"
MarkFirstMatch="true" Filter="StartsWith" DataValueField="product_gid" EmptyMessage="Select Product"
EnableLoadOnDemand="true" Width="85%" ItemsPerRequest="20" DataSourceID="ds_cboproduct"
EnableAutomaticLoadOnDemand="true" AutoPostBack="false" ZIndex="10000000" Skin="WebBlue">
</telerik:RadComboBox>
渲染HTML:
<input id="ctl00_Content_cbo_productname_Input" class="rcbInput rcbEmptyMessage" type="text" value="Select Product" name="ctl00$Content$cbo_productname" autocomplete="off">
OnChange事件触发后,页面所有服务器端回传报错如下:
使用 RadComboBox 客户端 API(set_value() 和 get_value())而不是 jQuery val() 方法。在这里阅读更多关于它们的信息:
对于 ASP.NET AJAX 控制的任何其他 Telerik UI 也是如此。可能你有一个 RadTextBox 或其他东西(堆栈跟踪通过父 RadInput class)所以你也应该使用它自己的 API 而不是 jQuery。根据您的代码,我想 cboproductgroup 是一个 RadComboBox,txt_ProductCode 是一个 RadTextBox,也许 txt_displayfield 和 cboUOM 也是。