2011-04-10 61 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