[英]How to use serialized data in asp.net mvc and C#
我正在使用可排序的jQuery UI對DOM中的列表進行排序。 我成功地有了一個ajax函數,將該字符串發布到我的mvc操作中:
list[]=2&list[]=3&list[]=28&list[]=1
我試圖弄清楚如何將這個序列化的數字列表放入List<int>
以便實際上可以從C#訪問它們。
我該怎么做? 我已經嘗試過這種方法:
[HttpPost]
public string RoleTierUpdate( string[] form)
{
StringBuilder sb = new StringBuilder();
foreach (var item in form)
{
sb.AppendFormat("id: {0}<br />", item);
}
return sb.ToString();
}
我當時在想可以將字符串數組轉換為整數列表。 但這返回了以下輸出:
id: 2
id: ,
id: 3
id: ,
id: 2
id: 8
id: ,
id: 1
這是將這些數據放入int列表的更簡單方法嗎?
這是執行ajax發布的代碼:
<script type="text/javascript">
// Sortable
$(document).ready(function () {
$("#sortThis").sortable({
handle: '.handle',
update: function () {
// get new order
var order = $('#sortThis').sortable('serialize');
// excecute ajax for db update
$.post(
"/find/AdminMember/RoleTierUpdate/",
order,
function (data) {
$("#info").html(data);
}
);
$("#info2").html(">>" + order + "<<");
}
});
});
</script>
order
包含我上面顯示的字符串。
將控制器更新為:
[HttpPost]
public string RoleTierUpdate( List<int> list, MemberData md) // change to List<int> list
{
StringBuilder sb = new StringBuilder();
if (list != null) // added check for null
{
foreach (var item in list)
{
sb.AppendFormat("id: {0}<br />", item);
}
}
else {
sb.Append("form is null");
}
return sb.ToString();
}
將ajax更新為:
$(document).ready(function () {
jQuery.ajaxSettings.traditional = true; // added
$("#sortThis").sortable({
handle: '.handle',
update: function () {
// get new order
var order = $('#sortThis').sortable('serialize');
// excecute ajax for db update
$.post(
"/find/AdminMember/RoleTierUpdate/",
order,
function (data) {
$("#info").html(data);
}
);
$("#info2").html(">>" + order + "<<");
}
});
});
輸出是:
form is null
看來是MVC的modelbinder不願意綁定字符串的原因
list[]=2&list[]=3&list[]=28&list[]=1
到List<int> list
的原因是由於鍵中的“ []”。 我將此JavaScript添加到了jQuery:
// get new order
var order = $('#sortThis').sortable('serialize');
order = order.replace(/\[\]/gi, "")
一旦我從鍵中取出“ []”,一切都很棒。 該操作返回了以下結果:
id: 2
id: 3
id: 28
id: 1
這正是我所需要的。 與List<int>
的模型綁定工作良好。
ASP.NET將自動檢測到您正在嘗試使用列表。 做這個:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult RoleTierUpdate(List<String> list)
或將String
替換為Int32
如果需要整數)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.