我正在尝试使用.asmx页面和Javascript中的ajax调用通过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事件后,页面的所有服务器端回发都会抛出错误,如下所示:
答案 0 :(得分:1)
使用RadComboBox客户端API(set_value()和get_value())而不是jQuery val()方法。在这里阅读更多关于他们的信息:
对于ASP.NET AJAX控件的任何其他Telerik UI也是如此。可能你有一个RadTextBox或其他东西(堆栈跟踪通过父RadInput类)所以你也应该使用自己的API而不是jQuery。从您的代码中,我认为cboproductgroup是一个RadComboBox,txt_ProductCode是一个RadTextBox,也可能是txt_displayfield和cboUOM。