在页面中调用 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 也是。