2012-02-09 4 views
1

Я использую приложение JQGrid в .net. Я использовал образцы онлайн-кода, он не выдавал никаких ошибок, но он не работает или не уверен, что я делаю неправильно. Может ли кто-то, кто работал над JQgrid, пройти через мой код и показать мне немного о том, что я делаю неправильно. Я могу войти в код на стороне сервера, и он не бросает никаких ошибок. Действительно не совсем уверен, что я делаю неправильно.JQGrid с webservice не загружает данные

Вот страница ASPX:

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head id="Head1" runat="server"> 
<title></title> 
<link rel="stylesheet" type="text/css" media="screen" href="jquery-ui-1.8.17.custom.css" /> 
<link rel="stylesheet" type="text/css" media="screen" href="ui.jqgrid.css" /> 

    <script src="jquery.js" type="text/javascript"></script> 

    <script src="grid.locale-en.js" type="text/javascript"></script> 

    <script src="jquery.dataTables.min.js" type="text/javascript"></script> 

    <script src="jquery.jqGrid.min.js" type="text/javascript"></script> 

Вызов gquery для загрузки сетки

<script type="text/javascript"> 
     jQuery(document).ready(function() { 
      jQuery("#list").jqGrid({ 
       type: "GET", 
       url: "MyService.asmx/GetRecipie", 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 

       colNames: ['Inv No', 'Date', 'Amount'], 
       colModel: [ 
     { name: 'job_id', index: 'job_id', width: 55 }, 
     { name: 'job_num', index: 'job_num', width: 90 }, 
     { name: 'order_num', index: 'order_num', width: 80, align: 'right'}], 
       pager: jQuery('#pager'), 
       rowNum: 10, 
       rowList: [10, 20, 30], 
       sortname: 'id', 
       sortorder: "desc", 
       viewrecords: true, 
       imgpath: 'themes/basic/images', 
       caption: 'My first grid', 
       loadError: Error 

      }); 
     }); 

     function Error(xhr, st, err) { 
      jQuery("#rsperror").html("Type: " + st + "; Response: " + xhr.status + " " + xhr.statusText); 
     } 


    </script> 

</head> 
<body> 
    <table id="list" class="scroll"> 
    </table> 
    <div id="pager" class="scroll" style="text-align: center;"> 
    </div> 
</body> 
</html> 

Мой веб-сервиса

 [WebMethod] 
     [ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = false)] 
     public string GetRecipie() 
     { 
      string strQuery = "SELECT * FROM job where job_id like '%2345%'"; 
      DataTable dtRecipie = null; 
      Recipie objRecipie = default(Recipie); 
      SqlConnection con = new SqlConnection("Integrated Security=SSPI;Persist Security Info=False;DATABASE=TESTDB;Data Source=SQL;"); 
      using (con) 
      { 
       con.Open(); 
       using (SqlDataAdapter sqlAdapter = new SqlDataAdapter(strQuery, con)) 
       { 
        dtRecipie = new DataTable(); 
        sqlAdapter.Fill(dtRecipie); 
       } 
      } 
      List<Recipie> drlist = new List<Recipie>(); 
      foreach (DataRow dr in dtRecipie.Rows) 
      { 
       objRecipie = new Recipie(); 
       objRecipie.jobId = Convert.ToInt32(dr["job_id"].ToString()); 
       objRecipie.JobNumber = dr["job_num"].ToString(); 
       objRecipie.OrderNumber = dr["order_num"].ToString(); 
       drlist.Add(objRecipie); 
      } 

      JavaScriptSerializer jSearializer = new JavaScriptSerializer(); 
      return jSearializer.Serialize(drlist); 

     } 
    } 


    public class Recipie 
    { 
     public int jobId; 
     public string JobNumber; 
     public string OrderNumber; 
    } 


} 
+0

Это потому, что у вас есть UseHttpGet = false, но ваш вызов Ajax выполняется с помощью GET вместо POST? – Tuan

+0

@Tuan: В общем, вы правы, но HTTP GET будет использоваться не из-за 'type:" GET "', а потому, что правильное имя параметра должно быть 'mtype:" POST "'. Параметр 'dataType:" json "' также неверен (неверный случай). Поэтому default 'datatype:" xml "' будет использоваться jqGrid. Опубликованный код содержит так много ошибок, что список будет слишком длинным. Например, вместо возвращаемого объекта 'drlist' (' List ') из веб-метода вызывается один вызов' JavaScriptSerializer.Serialize' вручную. Полученная строка будет JSON закодирована еще раз. Я могу продолжить ... – Oleg

+0

@ user1098028: Я рекомендую вам прочитать [ответ] (http://stackoverflow.com/a/3161542/315935). [Здесь] (http://stackoverflow.com/a/4031603/315935) и [здесь] вы можете найти некоторые ссылки на демонстрационные проекты, которые вы можете скачать. Я надеюсь, что вы можете изменить демо в свою среду. – Oleg

ответ

0

1 - Вы Сериализация список ваших лиц без изменяя их до формата, который понимает jqgrid.

Вы должны вернуть JSon, который выглядит следующим образом:

{ 
    "page":"1", 
    "total":4, 
    "records":"10", 

    "rows":[ 
     {"id":"1","cell":["Prabir","Shrestha"]}, 
     {"id":"2","cell":["Bill","Gates"]}, 
     {"id":"3","cell":["Steve","Ballmer"]} 
    ] 
} 

От: http://blog.prabir.me/post/Using-jqGrid-with-ASPNET-Web-Forms-e28093-Part-I.aspx. На этом сайте объясняется, как вы можете конвертировать ваши данные в этот формат.

Другое дело, что в вашем веб-сервисе вы используете UseHttpGet = false, в то время как вы инициализируете jqgrid с помощью type: "GET". Вам нужно изменить один из них.

Смежные вопросы