2016-08-25 22 views
0

我有一個複選框列下面的jqGrid:後的jqGrid值MVC控制器

$(document).ready(function() { 
     $("#tblJQGrid").jqGrid({ 
      url: 'Home/GetDataForCompanyJqGrid', 
      datatype: "json", 
      mtype: 'GET', 
      colNames: ['CompanyID', '', 'Offices'], 
      colModel: [ 
      { name: 'CompanyID', index:'CompanyID', key:true, hidden:true}, 
      { name: 'check', index: 'check', width: 50, align: 'center', editable: true, edittype: 'checkbox', editoptions: {value: "True:False"}, formatter: "checkbox", formatoptions: {disabled: false}}, 
      { name: 'Description', index: 'CompanyName', width: 200, align: 'center' }], 
      rowNum: 10, 
      data: {}, 
      sortname: 'CompanyName', 
      viewrecords: true, 
      sortorder: "desc", 
      height: "auto", 
      caption: "List Offices:"}); 
    }); 

我的jqGrid包含一個複選框列和我要發佈我的CompanyID列的值,如果行復選框被選中,我的MVC控制器。我試圖通過在我的html表單中指定一個動作action="@Url.Action("ExportData", "MyControler")"來將所有行的值首先發布到我的MCV ActioResult,但我的ActionResult中只有null。 任何人都可以幫助我一個想法如何實現從我的jqgrid發佈值到我的MVC ActionResult?

+0

你的問題還不完全清楚。你是否用服務器的某些值填充了「check」,或者最初沒有選擇所有複選框,並且用戶應該選擇某個人,並且您需要將選定的CompanyID發送到服務器?我想你應該**刪除**'name:'check''列並添加'multiselect:true'選項。你使用'rowNum:10'並且不使用'loadonce:true'選項。在Home/GetDataForCompanyJqGrid中實現**服務器端分頁**嗎?如果它返回更多10行,會是什麼?從'Home/GetDataForCompanyJqGrid'中返回哪種格式的數據? – Oleg

+0

如果從'Home/GetDataForCompanyJqGrid''返回的數據格式如數組{{「CompanyID」:123,「CompanyName」:「某個名稱}}'',那麼您可以移除'CompanyID'列並使用'jsonReader: {id:「CompanyID」}'。每個網格行(''元素)具有'id'屬性(rowid)。如果來自'CompanyID'的值是唯一的,那麼使用這些值作爲rowid是很好的。您可能只有**一列的網格**。 – Oleg

+0

您使用哪個版本的jqGrid(必須使用)以及哪個版本的jqGrid([免費jqGrid](https://github.com/free-jqgrid/jqGrid),商業版[Guriddo jqGrid JS](http:// guriddo.net/?page_id=103334)還是舊版jqGrid版本<= 4.7)?我開發免費的jqGrid分叉。如果我正確理解你所做的事情,那麼你的'GetDataForCompanyJqGrid'代碼可以非常容易,JavaScript也很容易,你需要使用'loadonce:true,multiselect:true,forceClientSorting:true,multiPageSelection:true'。以[演示](http://www.ok-soft-gmbh.com/jqGrid/OK/multiPageSelection.htm)爲基礎。 – Oleg

回答

0

我建議您使用multiselect: true而不是列name: 'check'。另外,你可以從控制器動作GetDataForCompanyJqGrid以非常簡單的形式返回數據,例如,下列:

[ 
    {"CompanyID": 123, "CompanyName": "Company name 1"}, 
    {"CompanyID": 345, "CompanyName": "Company name 2"}, 
    ... 
    {"CompanyID": 456, "CompanyName": "Company name N"} 
] 

,並使用類似的代碼

$("#tblJQGrid").jqGrid({ 
    url: 'Home/GetDataForCompanyJqGrid', 
    datatype: "json", 
    colNames: ['Offices'], 
    colModel: [ 
     { name: 'CompanyName', width: 200, align: 'center' } 
    ], 
    multiselect: true, 
    jsonReader: { id: "CompanyID" }, 
    rowNum: 1000, // no local paging 
    viewrecords: true, 
    height: "auto", 
    caption: "List Offices:" 
}); 

$(document).ready內。您可以使用$("#tblJQGrid").jqGrid("getGridParam", "selarrrow")來獲取所選項目的CompanyID數組。您可以在頁面上添加一個按鈕,然後將$("#tblJQGrid").jqGrid("getGridParam", "selarrrow"),然後$.ajax的信息用於服務器。您可以使用例如

var ids = $("#tblJQGrid").jqGrid("getGridParam", "selarrrow"); 
$.ajax({ 
    type: "POST", 
    url: 'Home/ExportData', 
    data: { 
     selectedIds: ids.join() // send comma separated ids 
     // ExportData action should have parameter with the name selectedIds 
    } 
}); 

the old answer爲相應的代碼示例。

+0

是否可以發送selectedIds數組? – FabianJ

+0

@FabianJ:一切皆有可能,但在JavaScript代碼中使用'ids.join()'和在您的C#代碼中使用'var ids = selectedIds.Split(',');'會產生最簡單明瞭的代碼。這是我推薦你的方式。其他任何代碼都需要更多的C#代碼來自定義綁定,但最後它會執行相同的操作。以[答案](http://stackoverflow.com/a/9508310/315935)爲例。 – Oleg

+0

可否請給我一個例子,我的ActionResult應該如何?因爲我仍然只有空。我試着用'public ActionResult ExportData(string selectedIds)' – FabianJ