【问题标题】:Postback to the server throws error after web service call in the page在页面中调用 Web 服务后,回发到服务器会引发错误
【发布时间】:2016-02-07 10:26:48
【问题描述】:

我正在尝试通过使用 .asmx 页面的 Web 服务调用和 Javascript 中的 ajax 调用来进行 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事件后,页面的所有服务器端回发都会抛出如下错误:

【问题讨论】:

    标签: jquery asp.net vb.net telerik asmx


    【解决方案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 也是。

    【讨论】:

      猜你喜欢
      • 2018-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-28
      • 1970-01-01
      相关资源
      最近更新 更多