【问题标题】:How to work with c# datatable in jquery ajax in asp.net webform?如何在asp.net webform中使用jquery ajax中的c#数据表?
【发布时间】:2014-01-09 08:48:30
【问题描述】:

伙计们,我想将数据表从 c# 发送到 jquery Ajax。如果我发送字符串,它可以正常工作,如果我发送数据表,它会在下面给出我发布的输出错误!

[WebMethod]
            public static DataTable getGuestByGuestIDFront(string guest_id)
            {

                DataTable dt621 = BAL.getGuestByGuestID(guest_id);
                return dt621;
            }

jquery

  < script type = "text/javascript" >

 function guest_search() {
     //      debugger;
     var guest_id = $('#guest_id').val();
     jQuery.ajax({
         url: 'Walkin6.aspx/getGuestByGuestIDFront',
         type: "POST",
         data: "{'guest_id':" + guest_id + "}",
         contentType: "application/json; charset=utf-8",
         dataType: "json",
         success: function (data) {
             debugger;
             // TabItem2_click();
             console.log(data.d);
             //   alert("Booking ID " + data.d);
             // $("#message").html((data.d));

             //   $(this).prop("disabled", true);

         },
         error: function (result) {
             console.log('Failed' + result.responseText);
         }

     });
 } < /script>

这是输出!

Failed{"Message":"在 System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(对象 o、StringBuilder sb、Int32 深度、Hashtable objectsInUse、SerializationFormat serializationFormat、MemberInfo currentMember)\r\n at System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue(Object o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat, MemberInfo currentMember)\r\n 在 System.Web.Script.Serialization.JavaScriptSerializer.SerializeCustomObject(Object o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat)\r\n 在 System.Web.Script.Serialization.JavaScriptSerializer。 SerializeValueInternal(Object o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat, MemberInfo currentMember)\r\n 在 System.Web .Script.Serialization.JavaScriptSerializer.SerializeValue(Object o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat, MemberInfo currentMember)\r\n 在 System.Web.Script.Serialization.JavaScriptSerializer.SerializeEnumerable(IEnumerable enumerable, StringBuilder sb, Int32 深度、Hashtable objectsInUse、SerializationFormat serializationFormat)\r\n 在 System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(Object o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat, MemberInfo currentMember)\r\n at System .Web.Script.Serialization.JavaScriptSerializer.SerializeValue(Object o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat, MemberInfo currentMember)\r\n 在 System.Web.Script.Serialization.JavaScriptSerializer.SerializeCustomObject(Object o, StringBuilder sb,Int32 深度,Hashtable objectsInUse,SerializationFormat 序列化格式)\r\n 在 System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(Object o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat, MemberInfo currentMember)\r\n 在 System.Web.Script.Serialization。 JavaScriptSerializer.SerializeValue(Object o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat, MemberInfo currentMember)\r\n at System.Web.Script.Serialization.JavaScriptSerializer.SerializeCustomObject(Object o, StringBuilder sb, Int32 depth, Hashtable objectsInUse , SerializationFormat serializationFormat)\r\n 在 System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(Object o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat, MemberInfo currentMember)\r\n 在 System.Web.Script。 Serialization.JavaScriptSerializer.SerializeValue(Object o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationForm在 serializationFormat, MemberInfo currentMember)\r\n 在 System.Web.Script.Serialization.JavaScriptSerializer.SerializeCustomObject(Object o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat)\r\n 在 System.Web.Script.Serialization .JavaScriptSerializer.SerializeValueInternal(Object o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat, MemberInfo currentMember)\r\n at System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue(Object o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat, MemberInfo currentMember)\r\n 在 System.Web.Script.Serialization.JavaScriptSerializer.SerializeCustomObject(Object o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat)\r\n 在 System.Web.Script .Serialization.JavaScriptSerializer.SerializeValueInternal(Object o, StringBuilder sb, Int32 depth, Hashtable objectsI nUse, SerializationFormat serializationFormat, MemberInfo currentMember)\r\n 在 System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue(Object o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat, MemberInfo currentMember)\r\n 在 System。 Web.Script.Serialization.JavaScriptSerializer.SerializeEnumerable(IEnumerable enumerable, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat)\r\n 在 System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(Object o, StringBuilder sb, Int32 depth , Hashtable objectsInUse, SerializationFormat serializationFormat, MemberInfo currentMember)\r\n at System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue(Object o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat, MemberInfo currentMember)\r\n at System.Web.Script.Serialization.JavaScriptSerializer.SerializeCustomObject(对象o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat)\r\n at System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(Object o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat, MemberInfo currentMember)\ r\n 在 System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue(对象 o,StringBuilder sb,Int32 深度,Hashtable objectsInUse,SerializationFormat serializationFormat,MemberInfo currentMember)\r\n 在 System.Web.Script.Serialization.JavaScriptSerializer.Serialize (对象 obj,StringBuilder 输出,SerializationFormat 序列化格式)\r\n 在 System.Web.Script.Serialization.JavaScriptSerializer.Serialize(对象 obj,SerializationFormat 序列化格式)\r\n 在 System.Web.Script.Serialization.JavaScriptSerializer.Serialize(对象 obj)\r\n 在 System.Web.Script.Services.RestHandler.InvokeMethod(HttpContext context, WebServiceMethodData methodData, IDi ctionary`2 rawParams)\r\n 在 System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.InvalidOperationException"}

无论如何都可以在 jquery ajax 中使用 c# 数据表!!

【问题讨论】:

    标签: c# asp.net jquery webforms


    【解决方案1】:

    c#代码

      [WebMethod]
            public static string getGuestByGuestIDFront(string guest_id)
            {
                DataTable dt = BAL.getGuestByGuestID(guest_id);
    
                List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();
                Dictionary<string, object> row = null;
    
                foreach (DataRow dr in dt.Rows)
                {
                    row = new Dictionary<string, object>();
                    foreach (DataColumn col in dt.Columns)
                    {
                        row.Add(col.ColumnName, dr[col]);
                    }
                    rows.Add(row);
                }
    
                string json = js.Serialize(rows);
                return json;
            }
    

    成功的javascript代码:

     success: function (serverdata) {
    
        var tableData = $.parseJSON(serverdata.d);
      }
    

    【讨论】:

      【解决方案2】:

      你需要做这样的事情

      [WebMethod]
      public static string doSomething(int id)
      {
         DataTable dt621 = BAL.getGuestByGuestID(guest_id);
      
         return JsonConvert.SerializeObject(dt621);
      }
      

      然后在成功调用ajax

       success: function (data) {
      
          var tableData = $.parseJSON(data.d);//if you want your data in json
        }
      

      【讨论】:

      • 很好地指出了 JsonConvert.SerializeObject()。但是,如果在客户端使用第三方控件/小部件,则可能根本不需要 $.parseJSON。
      【解决方案3】:

      错误提示存在循环引用。如果您知道它们实际上不存在,则使用 Json.NET 序列化对象作为对 AJAX 调用的响应或创建更简单的 DTO。我对 .net 框架中的默认序列化程序有类似的问题 - 由于 C.R. 实际上不存在,它无法序列化对象!转移到 Json.NET 为我解决了这个问题。

      【讨论】:

        猜你喜欢
        • 2023-03-30
        • 1970-01-01
        • 2021-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多