我正在尋找代碼,我可以用它在表單提交上發佈劍道網格數據到控制器。 請注意:我不能使用JSON發佈,因爲我必須使用網格數據來創建一個excel文件。 我想在我的jQuery中做什麼:這裏UserRegistrationForm是我的表單名稱,其中包含網格。發表Kendo在表格提交的網格數據
$("#UserRegistrationForm").submit();
你能建議我的控制器動作應該如何獲得網格的值。
我正在尋找代碼,我可以用它在表單提交上發佈劍道網格數據到控制器。 請注意:我不能使用JSON發佈,因爲我必須使用網格數據來創建一個excel文件。 我想在我的jQuery中做什麼:這裏UserRegistrationForm是我的表單名稱,其中包含網格。發表Kendo在表格提交的網格數據
$("#UserRegistrationForm").submit();
你能建議我的控制器動作應該如何獲得網格的值。
爲了達到這個目的,我通常在子表單之前使用網格數據生成隱藏字段。一個簡單的方法做到這一點:
$("#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);
});
這將導致一個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語言。
只需要注意:雖然隱藏字段解決方案將工作(我已經完成),但它不適用於大型數據集,如果您使用網格分頁,因爲並非所有行都一次呈現,它將無法正常工作。 –
@TheDreadPirateStephen你的意思是「不適用於大數據集」?瀏覽器或API無法很好地處理一定數量的數據嗎?如果你已經在你的網格中設置了服務器分頁,事實上,你不能處理所有的數據,因爲它沒有被完全加載,但是如果它沒有被加載,沒有實際更新的目的,因爲它沒有被加密,對?順便說一句,如果你的網格在客戶端分頁,上面的代碼片段可以在數據完全加載的情況下正常工作[http://dojo.telerik.com/aXiYO]。 – DontVoteMeDown
即使在客戶端,一次只能將1頁數據呈現爲html。其餘的數據只是dataSource。因此,未呈現的行將不會呈現其隱藏的輸入字段,因此在表單處於發佈狀態時不會發布。然後,您將要求您的頁面大小足夠大以呈現最大的數據集大小,這將最終呈現太多的html,並且瀏覽器將開始突然出現。在你的例子中,如果你要添加隱藏的輸入渲染,然後發佈表單(網格在表單內),那麼只會發佈當前頁面的數據。 –
有關這方面的消息嗎? – DontVoteMeDown