我使用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包含我在上面显示的字符串.
编辑2
更新控制器:
[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的模型绑定器不愿意绑定字符串的原因
list[]=2&list[]=3&list[]=28&list[]=1
到列表< int>列表是因为键中的“[]”.我将这个javascript添加到我的jQuery中:
// get new order
var order = $('#sortThis').sortable('serialize');
order = order.replace(/\[\]/gi, "")
一旦我从按键中取出“[]”,一切都很棒.该操作返回此结果:
id: 2
id: 3
id: 28
id: 1
这正是我所需要的.模型绑定到List< int>工作得很好.