简体   繁体   English

如何在asp.net webform中的jquery ajax中使用c#datatable?

[英]How to work with c# datatable in jquery ajax in asp.net webform?

Guys i want to send a datatable from c# to jquery Ajax. 伙计们我想从c#向jquery Ajax发送数据表。 if i send string it works properly and if i send datatable it gives the output error below i have posted! 如果我发送字符串它正常工作,如果我发送数据,它给出输出错误下面我已发布!

在此输入图像描述

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

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

Jquery 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>

This is the output! 这是输出!

Failed{"Message":"A circular reference was detected while serializing an object of type \'System.Reflection.RuntimeModule\'.","StackTrace":" at 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(Object 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 at System.Web.Script.Seria 失败{“消息”:“在序列化类型为\\ u0027System.Reflection.RuntimeModule \\ u0027的对象时检测到循环引用。”,“StackTrace”:“在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.Serialize.VavaScript.Serialization.VavaScript.SerializeVerialueInternal(Object)中的System.Web.Script.Serialization.JavaScriptSerializer.SerializeCustomObject(Object o,StringBuilder sb,Int32 depth,Hashtable objectsInUse,SerializationFormat serializationFormat)\\ r \\ n o,StringBuilder sb,Int32 depth,Hashtable objectsInUse,SerializationFormat serializationFormat,MemberInfo currentMember)\\ r \\ n在System.Web.Script.Seria上 lization.JavaScriptSerializer.SerializeValue(Object o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat, MemberInfo currentMember)\\r\\n at System.Web.Script.Serialization.JavaScriptSerializer.SerializeEnumerable(IEnumerable enumerable, 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 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(Object o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat)\\r\\n at System lization.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,哈希表objectsInUse,serializationFormat serializationFormat个)\\ r \\ n在System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(对象O,StringBuilder的SB,深度Int,哈希表objectsInUse,serializationFormat serializationFormat,的MemberInfo currentMember个)\\ r \\ n在System.Web程序。 Script.Serialization.JavaScriptSerializer.SerializeValue(对象O,StringBuilder的SB,深度Int,哈希表objectsInUse,SerializationFormat serializationFormat,的MemberInfo currentMember个)\\ r \\ n在System.Web.Script.Serialization.JavaScriptSerializer.SerializeCustomObject(对象O,StringBuilder的SB,的Int32在系统中,深度,Hashtable objectsInUse,SerializationFormat serializationFormat)\\ r \\ n .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(Object 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 at System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue(Object o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat, MemberI .Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(对象O,StringBuilder的SB,深度Int,哈希表objectsInUse,SerializationFormat serializationFormat,的MemberInfo currentMember个)\\ r \\ n在System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue(对象O,StringBuilder的SB,深度Int,哈希表objectsInUse,SerializationFormat serializationFormat,的MemberInfo currentMember个)\\ r \\ n在System.Web.Script.Serialization.JavaScriptSerializer.SerializeCustomObject(对象O,StringBuilder的SB,深度Int,哈希表objectsInUse,SerializationFormat serializationFormat个)\\ r \\ n在System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(对象O,StringBuilder的SB,深度Int,哈希表objectsInUse,serializationFormat serializationFormat,的MemberInfo currentMember个)\\ r \\ n在System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue(对象O ,StringBuilder sb,Int32 depth,Hashtable objectsInUse,SerializationFormat serializationFormat,MemberI nfo currentMember)\\r\\n at System.Web.Script.Serialization.JavaScriptSerializer.SerializeCustomObject(Object 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 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(Object 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 serializationFo nfo currentMember)\\ r \\ n在System.Web.Script.Serialization.Iv.P.对于System.Web.Script.Serial化处理过程中的System.Web.Script.Serialization.JavaScriptSerializer.SerializeCustomObject(Object o,StringBuilder sb,Int32 depth,Hashtable objectsInUse,SerializationFormat serializationFormat)\\ r \\ n。 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)在System.Web.Script.Serialization的System.Web.Script.Serialization.JavaScriptSerializer.SerializeCustomObject(Object o,StringBuilder sb,Int32 depth,Hashtable objectsInUse,SerializationFormat serializationFormat)\\ r \\ n中的serializationFormat,MemberInfo currentMember)\\ r \\ n。 JavaScriptSerializer.SerializeValueInternal(Object o,StringBuilder sb,Int32 depth,Hashtable objectsInUse,SerializationFormat serializationFo rmat, 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.SerializeEnumerable(IEnumerable enumerable, 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 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(Object o, StringBuilder sb, Int32 depth, Hashtable object 在System.Web.Script.Script上的System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue(Object o,StringBuilder sb,Int32 depth,Hashtable objectsInUse,SerializationFormat serializationFormat,MemberInfo currentMember)\\ r \\ n中的rmat,MemberInfo currentMember)\\ r \\ n .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) ,System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue(Object o,StringBuilder sb,Int32 depth,Hashtable objectsInUse,SerializationFormat serializationFormat,MemberInfo currentMember)\\ r \\ n在System.Web上的,SerializationFormat serializationFormat,MemberInfo currentMember)\\ r \\ n .Script.Serialization.JavaScriptSerializer.SerializeCustomObject(Object o,StringBuilder sb,Int32 depth,Hashtable object sInUse, 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 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.Serialize(Object obj, StringBuilder output, SerializationFormat serializationFormat)\\r\\n at System.Web.Script.Serialization.JavaScriptSerializer.Serialize(Object obj, SerializationFormat serializationFormat)\\r\\n at System.Web.Script.Serialization.JavaScriptSerializer.Serialize(Object obj)\\r\\n at System.Web.Script.Services.RestHandler.InvokeMethod(HttpContext context, WebServiceMethodData methodData, IDictionary`2 rawParams)\\r\\n at System.Web.Script.Services.RestHan sInUse,SerializationFormat serializationFormat个)\\ r \\ n在System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(对象O,StringBuilder的SB,深度Int,哈希表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.Serialize(Object obj,StringBuilder输出,SerializationFormat serializationFormat) )\\ r \\ n在System.Web.Script.Serialization.JavaScriptSerializer.Serialize(Object obj,SerializationFormat serializationFormat)\\ r \\ n在System.Web.Script.Serialization.JavaScriptSerializer.Serialize(Object obj)\\ r \\ n at System System.Web.Script.Services.RestHan中的.Web.Script.Services.RestHandler.InvokeMethod(HttpContext context,WebServiceMethodData methodData,IDictionary`2 rawParams)\\ r \\ n dler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.InvalidOperationException"} dler.ExecuteWebServiceCall(HttpContext context,WebServiceMethodData methodData)“,”ExceptionType“:”System.InvalidOperationException“}

is there anyway to work with c# datatable in jquery ajax!! 无论如何在jquery ajax中使用c#datatable !!

c# code 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 code for success: javascript代码成功:

 success: function (serverdata) {

    var tableData = $.parseJSON(serverdata.d);
  }

You need to do something like this 你需要做这样的事情

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

   return JsonConvert.SerializeObject(dt621);
}

and then in success call of ajax 然后成功调用ajax

 success: function (data) {

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

The error says there are circular references. 错误说有循环引用。 If you know they actually do not exist serialize the object with Json.NET as the response to AJAX call or create simpler DTO. 如果你知道它们实际上不存在,那么使用Json.NET序列化对象作为对AJAX调用的响应或创建更简单的DTO。 I had similar problem with default serializer from .net framework - it couldn't serialize an object because of CR which actually weren't there! 我有.net框架中的默认序列化程序的类似问题 - 它无法序列化一个对象,因为CR实际上不存在! Shifting to Json.NET fixed the problem for me. 转移到Json.NET为我解决了这个问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM