2016-06-20 39 views
0

我正在尋找代碼,我可以用它在表單提交上發佈劍道網格數據到控制器。 請注意:我不能使用JSON發佈,因爲我必須使用網格數據來創建一個excel文件。 我想在我的jQuery中做什麼:這裏UserRegistrationForm是我的表單名稱,其中包含網格。發表Kendo在表格提交的網格數據

$("#UserRegistrationForm").submit(); 

你能建議我的控制器動作應該如何獲得網格的值。

+0

有關這方面的消息嗎? – DontVoteMeDown

回答

0

爲了達到這個目的,我通常在子表單之前使用網格數據生成隱藏字段。一個簡單的方法做到這一點:

$("#my-form").submit(function() { 
    var grid = $("#grid").data("kendoGrid"), 
     data = grid.dataSource.data(), 
     columns = grid.options.columns.map(function(item) { return item.field; }), 
     html = ""; 

    for (var i = 0; i < data.length; i++) { 
     var fields = Object.keys(data[i]); 

     for (var n = 0; n < fields.length; n++) { 
      if (columns.indexOf(fields[n]) > -1) { 
       html+= "<input type='hidden' name='" + fields[n] + "[" + i + "]' value='" + data[i][fields[n]] + "' />"; 
      } 
     } 
    } 

    $("#hidden-fields").empty().append(html); 
}); 

Working Demo

這將導致一個div(#hidden-fields),這也是在表單內內一組隱藏字段。它的名字將是這樣的:

name="PropertyA[0]" value="valueOfA0" 
name="PropertyB[0]" value="valueOfB0" 
name="PropertyA[1]" value="valueOfA1" 
name="PropertyB[1]" value="valueOfB1" and so on... 

這很容易適應一個ASP.Net MVC列表參數或在一個視圖模型內部列表的情況下,僅僅是屬性名稱,例如之前添加視圖模型的名稱ViewModel.PropertyA[0]。對於PHP,它會產生一個數組,例如$_POST["PropertyA"]。我不確定其他API語言。

+0

只需要注意:雖然隱藏字段解決方案將工作(我已經完成),但它不適用於大型數據集,如果您使用網格分頁,因爲並非所有行都一次呈現,它將無法正常工作。 –

+0

@TheDreadPirateStephen你的意思是「不適用於大數據集」?瀏覽器或API無法很好地處理一定數量的數據嗎?如果你已經在你的網格中設置了服務器分頁,事實上,你不能處理所有的數據,因爲它沒有被完全加載,但是如果它沒有被加載,沒有實際更新的目的,因爲它沒有被加密,對?順便說一句,如果你的網格在客戶端分頁,上面的代碼片段可以在數據完全加載的情況下正常工作[http://dojo.telerik.com/aXiYO]。 – DontVoteMeDown

+0

即使在客戶端,一次只能將1頁數據呈現爲html。其餘的數據只是dataSource。因此,未呈現的行將不會呈現其隱藏的輸入字段,因此在表單處於發佈狀態時不會發布。然後,您將要求您的頁面大小足夠大以呈現最大的數據集大小,這將最終呈現太多的html,並且瀏覽器將開始突然出現。在你的例子中,如果你要添加隱藏的輸入渲染,然後發佈表單(網格在表單內),那麼只會發佈當前頁面的數據。 –