2017-10-14 60 views
1

我无法在加载页面时加载gridview。它总是给我无法在加载时加载Gridview

未捕获TypeError:无法读取未定义的属性“长度”。 我已经提过下面的代码和处理程序。请帮我解决问题。这个问题发生在Jquery中。

<script type="text/javascript"> 
      $(document).ready(function() { 
       BindGridView(); 

      }); 


function BindGridView() { 
      $.ajax({ 
       type: "POST", 
       url: "../Pm/uc/G.ashx/GetMailDetail", 
       contentType: "application/json;charset=utf-8", 
       data: {}, 
       dataType: "json", 
       success: function (data) { 
        if (data.d.length > 0) { 
         $("#grdDemo").append("<tr><th>Username</th></tr>"); 
         for (var i = 0; i < data.d.length; i++) { 

          $("#grdDemo").append("<tr><td>" + 
          data.d[i].Username + "</td> <td>"); 
         } 
        } 
       }, 
       error: function (result) { 
       } 
      }); 
     } 
     </script> 

    <asp:GridView ID="grdDemo" runat="server"> 
     </asp:GridView> 

这是在处理程序(可以替换任何查询。)

public void ProcessRequest(HttpContext context) 
    { 
     //int mailid = int.Parse(context.Request["mid"]); 
     //var detail = GetMailDetail(mailid); 
     var detail = GetMailDetail(); 

     if (detail != null) 
     { 
      context.Response.ContentType = "application/json"; 
      string json = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(detail); 
      context.Response.Write(json); 
     } 
     else 
     { 
      context.Response.StatusCode = 404; 
     } 
    } 

    //protected object GetMailDetail(int mailid) 
    protected object GetMailDetail() 
    { 
     List<DetailsClass> Detail = new List<DetailsClass>(); 

     Connection Con = new Connection(); 
     String Connection = Con.Active_Connection(); 
     SqlConnection con = new SqlConnection(Connection); 
     con.Open(); 
     DataTable dt = new DataTable(); 

     SqlCommand cmd = new SqlCommand("select Sp4_Txt from Sp4", con); 

     SqlDataAdapter da = new SqlDataAdapter(cmd); 
     DataTable dtGetData = new DataTable(); 

     da.Fill(dtGetData); 

     foreach (DataRow dtRow in dtGetData.Rows) 
     { 
      DetailsClass DataObj = new DetailsClass(); 
      DataObj.Username = dtRow["Sp4_Txt"].ToString(); 
      Detail.Add(DataObj); 
     } 

     return Detail.ToArray(); 
    } 
    public class DetailsClass //Class for binding data 
    { 
     public string Username { get; set; } 
    } 
    public bool IsReusable 
    { 
     get 
     { 
      return false; 
     } 
    } 
} 
+0

嗨,你可以在$(document).ready之前声明函数“function BindGridView()”任何改变吗? – 2017-10-14 10:29:50

+0

你为什么要访问'data.d.length'? 'd'在哪里?你期望什么?您是否在浏览器的网络控制台中查看,以确保您在AJAX调用中收到您对服务器的期望? – mason

+0

你为什么不正确地处理你的[IDisposable](https://msdn.microsoft.com/en-us/library/system.idisposable(v = vs.110).aspx)对象,如SqlConnection?你为什么首先将数据导入DataTable而不是直接进入强类型类? – mason

回答

1

Cannot read property 'length' of undefined.

此错误来了,因为你正在访问的data.d不检查data和访问data.d.length无检查data.d

做这样的事情:

if(data){ 
    if(data.d){ 
     if (data.d.length > 0) { 
       $("#grdDemo").append("<tr><th>Username</th></tr>"); 
       for (var i = 0; i < data.d.length; i++) { 

        $("#grdDemo").append("<tr><td>" + 
        data.d[i].Username + "</td> <td>"); 
       } 
      } 
     } 
}