我正在创建一个小应用程序来自学ASP.NET MVC和JQuery,其中一个页面是一个项目列表,其中一些可以选择。然后,我想按下一个按钮,并使用JQuery的Post函数向我的控制器发送一个列表(或等效项),其中包含所选项目的I。
我设法获得了一个包含所选元素I的数组,现在我想发布该数组。我可以这样做的一种方法是在我的页面中有一个带有隐藏值的虚拟表单,然后用选定的项设置隐藏的值,并发布该表单;尽管这看起来很粗糙。
有没有一种更干净的方法来实现这一点,通过直接将数组发送到控制器?我尝试了一些不同的方法,但看起来控制器无法映射它正在接收的数据。以下是到目前为止的代码:
function generateList(selectedValues) {
var s = {
values: selectedValues //selectedValues is an array of string
};
$.post("/Home/GenerateList", $.toJSON(s), function() { alert("back") }, "json");
}
然后我的控制器看起来像这样
public ActionResult GenerateList(List<string> values)
{
//do something
}
我所得到的只是控制器参数中的一个"null“...
有什么建议吗?
发布于 2010-03-27 06:34:49
仅供参考: JQuery改变了他们序列化post数据的方式。
http://forum.jquery.com/topic/nested-param-serialization
你必须将‘传统型’设置为true,否则
{ Values : ["1", "2", "3"] }
将出来的结果是
Values[]=1&Values[]=2&Values[]=3
而不是
Values=1&Values=2&Values=3
发布于 2008-11-21 18:24:10
不要将数据作为数组发布。To bind to a list, the key/value pairs should be submitted with the same value for each key.
您不应该需要表单来执行此操作。您只需要一个键/值对列表,您可以将其包含在对$.post的调用中。
发布于 2015-01-24 02:56:37
另一种实现也使用对象列表,而不仅仅是字符串:
JS:
var postData = {};
postData[values] = selectedValues ;
$.ajax({
url: "/Home/SaveList",
type: "POST",
data: JSON.stringify(postData),
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function(data){
alert(data.Result);
}
});
假设'selectedValues‘是对象数组。
在控制器中,参数是相应ViewModels的列表。
public JsonResult SaveList(List<ViewModel> values)
{
return Json(new {
Result = String.Format("Fist item in list: '{0}'", values[0].Name)
});
}
https://stackoverflow.com/questions/309115
复制相似问题