![](/img/trans.png)
[英]Can you convert C# dictionary to Javascript associative array using asp.net mvc Json()
[英]How do you serialize a JS array so Asp.net MVC can bind it to a c# list?
我试图将一个可排序的jquery项目列表发送到我的MVC方法进行数据处理。 目前,我正在尝试通过以下代码发送它:
var data = {};
data.projectId = projectId;
data.publishedSectionIds = $('#section_list').sortable('toArray');
// Perform the ajax
$.ajax({ url: '/Project/Publish',
type: 'POST',
data: data,
success: function (result) {
alert(result.message);
}
});
这段代码的问题是它使Post参数看起来像这样:
projectId=2&publishedSectionIds[]=1&publishedSectionIds[]=2
这个问题(可以从此问题的解决方案中看到)是,如果post参数没有括号,则MVC似乎只能序列化为List。
我如何序列化javascript数组,以便使用List<int>
参数模型进行的操作正确绑定?
public ActionResult Publish(int projectId, List<int> publishedSectionIds)
尝试添加以下传统选项:true
例如
$.ajax({ url: '/Project/Publish',
type: 'POST',
data: data,
traditional: true,
success: function (result) {
alert(result.message);
}
});
看到
从jQuery 1.4开始,$ .param()方法递归地序列化深层对象,以适应现代脚本语言和框架,例如PHP和Ruby on Rails。 您可以通过设置jQuery.ajaxSettings.traditional = true;全局禁用此功能。
好吧,这是我现在写的东西,可以正常工作!
这是动作:
Public Overridable Function PostProject(ByVal model As Project) As ActionResult
Return Json(model.PublishedSectionIds)
End Function
这是课程:
Public Class Project
Public Property ProjectId As Integer
Public Property PublishedSectionIds As IList(Of Integer)
End Class
这是JavaScript:
var data = {};
data.ProjectId = 1;
data.PublishedSectionIds = $('#section_list').sortable('toArray');
var url= "/testing/tester";
$.ajax({
url:url,
type: 'POST',
traditional: true,
data: data,
success: function (result) {
alert(result);
}
});
忽略我的行为是可替代的事实。 那只是来自t4mvc。
我用列表和IList或List尝试了一下,两者都很好。
希望有帮助!
编辑:
我也没有模型就对它进行了测试,如下所示:
Public Overridable Function PostProject2(ByVal ProjectId As Integer, ByVal PublishedSectionIds As List(Of Integer)) As ActionResult
Return Json(PublishedSectionIds)
End Function
添加它也很好。
如果您想在JS中完全处理它(您可能需要编辑第2行-我假设您使用的是列表,并尝试提取id属性本身)
var data = "projectId=" + projectId;
$("#section_list li").each(function(){ data += "&publishedSectionIds=" + this.id;});
$.ajax({ url: '/main/test',
type: 'POST',
data: data,
success: function (result) {
alert(result.message);
}
});
或者如果您想确保使用的是sortable('toArray')数据(尽管以上结果还提供了已排序的数据)
var data = "projectId=" + projectId;
var tempData = $('#section_list').sortable('toArray');
$.each(tempData, function(index, value){ data += "&publishedSectionIds=" + value;});
$.ajax({ url: '/main/test',
type: 'POST',
data: data,
success: function (result) {
alert(result.message);
}
});
当我将JavaScript数组传递到post方法中时,我将它们键入为int[]
而不是List<int>
。
如果没有,请尝试此操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.