2017-10-14 34 views
1

ページ読み込み時にgridviewを読み込めません。それは私を与え続ける読み込み時にGridviewを読み込めません

未知の型エラー:未定義のプロパティ '長さ'を読み取ることができません。 私はコードとその下のハンドラをmnetionedしました。問題を解決するのを手伝ってください。この問題は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変更の前に関数 "関数BindGridView()"を宣言できますか? –

+0

なぜ 'data.d.length'にアクセスしていますか? 'd'はどこですか?あなたはそれが何になると思いますか?ブラウザのネットワークコンソールを見て、AJAXコールでサーバから期待されるものを確実に受け取っていますか? – mason

+0

SqlConnectionのような[IDisposable](https://msdn.microsoft.com/en-us/library/system.idisposable(v = vs.110).aspx)オブジェクトを正しく処理できないのはなぜですか?あなたは強く型付けされたクラスに直接行くのではなく、最初にDataTableにデータを取得するのはなぜですか? – mason

答えて

1

Cannot read property 'length' of undefined.

あなたがdataをチェックしなくてdata.d.lengthにアクセスせずにdata.dにアクセスしているため、このエラーが来ていますチェック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>"); 
       } 
      } 
     } 
} 
関連する問題