2011-04-10 65 views
0

我調用Web服務來填補的jqGrid,並希望傳遞參數給它jqGrid參數。無法通過

我用下面的代碼(客戶端):

jQuery('#EmployeeTable').jqGrid({ 
    datatype: function() { 
     var params = new Object(); 
     params.page = 10; 
     params.Filter = true; 
     params.DateStart = null; 
     params.DateEnd = null; 
     params.TagID = null; 
     params.CategoryID = 3; 
     params.StatusID = 1; 
     params.IsDescription = true; 
     $.ajax({ 
      url: '/Admin/IdeasJSON', 
      type: "POST", 
      contentType: "application/json; charset=utf-8", 
      data: JSON.stringify(params), 
      dataType: "json", 
      success: function (data, st) { 
       if (st == "success") { 
        var grid = $("#EmployeeTable")[0]; 
        grid.addJSONData(data); 
       } 
      }, 
      error: function() { 
       alert("Error with AJAX callback"); 
      } 
     }); 
    }, 

也有網絡的propotype - 方法(MVC):

public JsonResult IdeasJSON(int? page, bool? Filter, DateTime? DateStart, DateTime? DateEnd, int? TagID, int? CategoryID, int? StatusID, bool? IsDescription) 

爲什麼所有這些參數都爲空?

[增加了04/11]

jQuery(document).ready(function() { 
     var StatusID = null, Filter = null, page = null, DateStart = null, DateEnd = null, TagID = null, CategoryID = null, IsDescription = null; 
     if (jQuery.url.param('StatusID') != null) { 
      StatusID = jQuery.url.param('StatusID'); 
     } 

     if (jQuery.url.param('Filter') != null) { 
      Filter = jQuery.url.param('Filter'); 
     } 

     if (jQuery.url.param('page') != null) { 
      page = jQuery.url.param('page'); 
     } 

     if (jQuery.url.param('DateStart') != null) { 
      DateStart = jQuery.url.param('DateStart'); 
     } 

     if (jQuery.url.param('DateEnd') != null) { 
      DateEnd = jQuery.url.param('DateEnd'); 
     } 

     if (jQuery.url.param('TagID') != null) { 
      TagID = jQuery.url.param('TagID'); 
     } 

     if (jQuery.url.param('CategoryID') != null) { 
      CategoryID = jQuery.url.param('CategoryID'); 
     } 

     if (jQuery.url.param('IsDescription') != null) { 
      IsDescription = jQuery.url.param('IsDescription'); 
     } 



     jQuery('#EmployeeTable').jqGrid({ 
      url: '/Admin/IdeasJSON', 
      datatype: 'json', 
      postData: { page: page, Filter: Filter, DateStart: DateStart, DateEnd: DateEnd, TagID: TagID, StatusID: StatusID, CategoryID: CategoryID, IsDescription: IsDescription }, 
      jsonReader: { 
       page: "page", 
       total: "total", 
       records: "records", 
       root: "rows", 
       repeatitems: false, 
       id: "" 
      }, 
      colNames: ['Logged By', 'Logging Agency (ID)', 'Title', 'Status', 'Points', 'Categories', 'Created Date', 'Description', 'Jira ID#', 'Portal Name', '', '', '', '', '', '', ''], 
      colModel: [ 
         { name: 'LoggedBy', width: 100 }, 
         { name: 'LoggingAgencyID', width: 85 }, 
         { name: 'Title', width: 100 }, 
         { name: 'Status', width: 100 }, 
         { name: 'Points', width: 40, align: 'center' }, 
         { name: 'Categories', width: 100 }, 
         { name: 'CreatedDate', width: 80, formatter: ndateFormatter }, 
         { name: 'Description', width: 300 }, 
         { name: 'JiraID', width: 55 }, 
         { name: 'PortalName', width: 100 }, 
         { name: 'IdeaID', width: 25, formatter: ActionDescriptionFormatter }, 
         { name: 'IdeaID', width: 25, formatter: ActionEditFormatter }, 
         { name: 'IdeaID', width: 25, formatter: ActionDeleteFormatter }, 
         { name: 'IdeaGridCommentsAndSubideas', width: 25, formatter: ActionIdeaGridCommentsAndSubideas }, 
         { name: 'IdeaGridCountVotes', width: 25, formatter: ActionIdeaGridCountVotes }, 
         { name: 'IdeaGridCountVotes', width: 25, formatter: ActionIdeaGridLinkIdeas }, 
         { name: 'IdeaGridCountVotes', width: 25, formatter: ActionIdeaGridIdeaType }, 
        ], 
      pager: '#EmployeeTablePager', 
      width: 1000, 
      viewrecords: true, 
      caption: 'Idea List', 
      excel: true 
     }).jqGrid('navGrid', '#EmployeeTablePager', { 
      add: false, 
      edit: false, 
      del: false, 
      search: false, 
      refresh: false 
     }).jqGrid('navButtonAdd', '#EmployeeTablePager', { 
      caption: " Export to Excel ", 
      buttonicon: "ui-icon-bookmark", 
      onClickButton: ReturnExcel, 
      position: "last" 
     }).jqGrid('navButtonAdd', '#EmployeeTablePager', { 
      caption: " Export to CSV ", 
      buttonicon: "ui-icon-bookmark", 
      onClickButton: ReturnCSV, 
      position: "last" 
     }); 
    }); 

回答

1

你不應該使用datatype作爲函數使用JSON數據。可能你使用了很老的例子的模板。

例如在the answer的「UPDATED」部分中,您可以找到完整的demo project,演示如何在ASP.MVC 2.0中使用jqGrid,包括分頁,排序和過濾/高級搜索。

如果你想發佈一些額外的參數到服務器的jqGrid的一部分要求,你應該使用postData參數形式postData: {CategoryID: 3, StatusID: 1, IsDescription:true, Filter: true}

+0

我真不明白它是如何工作的。我只看到名爲「sord」的參數作爲控制器中的方法參數,以及javascript中的「sortorder」。它如何鏈接? – 2011-04-10 22:16:46

+0

這是一樣的。 jqGrid根據'prmNames'參數定義url中包含的一些參數的名稱(參見[documentation](http://www.trirand.com/jqgridwiki/doku.php?id=wiki:options))。你很好理解'datatype'作爲函數或'addJSONData'如何工作?你不應該用這種方式。 – Oleg 2011-04-10 22:37:32

+0

是的,我現在明白了,這很簡單。我花了3個小時,結果它被添加了1個字符串:) – 2011-04-10 22:55:03