我有以下问题:
上的一个按钮,点击我的一些数据发送到服务器。 我的控制器操作是这样的:
public ActionResult Accept(List<MyViewModel> entries)
{
//here entries HAS 2 MyViewModel-Instances in it.
//The entries are not null, but the values of the instances are!
//entries[0].ParamA is null
}
凡MyViewModel看起来是这样的:
public class MyViewModel
{
public string ParamA { get; set; }
public string ParamB { get; set; }
}
而AJAX的呼叫是follwing:
var myEntries = { entries: [{ ParamA: "A", ParamB: "B" }, { ParamA: "C", ParamB: "D" }] };
$.ajax({
type: 'POST',
url: url,
cache: false,
data: myEntries,
dataType: 'text' });
我已经尝试过的事情:
- 更改数据类型为“JSON”
- 使用:传统:真
- 试图VAR myEntries = JSON.stringify(...);
- 试图VAR myEntries = {项:[JSON.stringify({...}),JSON.stringify({...})]};
- 与上面相同,但jQuery.param(...,真);
- 使用的IEnumerable或MyViewModel [],而不是名单。
- 上述的任意组合
我在做什么错在这里?
非常感谢你,非常喜欢您帮助我!
编辑
我(剃刀)查看是不是有趣的在这一刻,因为它无关任何事情。 我没有使用任何HTML.TextBoxFor(或similiar)的方法来填补myEntries变量。 它实际上是动态填充(因为有很多很多的条件)。 对于这个问题(和我自己的测试)的缘故,我硬编码的变量。 :)
随着你的答案和使用JSON.stringify
方法它为我工作
var myEntries = { entries: [{ ParamA: "A", ParamB: "B" },
{ ParamA: "C", ParamB: "D" }] };
$.ajax({
type: 'POST',
url: '/{controller}/{action}',
cache: false,
data: JSON.stringify(myEntries),
dataType: 'json',
contentType: 'application/json; charset=utf-8'
});
我得到了答案!
jQuery的有时可能造成混淆。
数据类型的参数,指定要取回从服务器上的内容。 的contentType是paremeter指定你发送到服务器。
所以从上面的例子中工作,如果你增加:
的contentType:“应用/ JSON; 字符集= UTF-8' ,
在AJAX调用。
只是恭维如何创建将回发到控制器列表中的答案。 那是因为你不需要用列表的名称来包装阵列。 它看起来丑陋和无法管理使用内置的功能。 这个例子是这里展示如何回来后的JSON MVC会理解和解释为一个列表。 (但即使阵列被包裹它仍然有效,但是是静态内容和难以管理)
本例使用jQuery的排序插件。 我要发布整个列表模型回来的新订货指数在数据库中进行保存。
update: function (event, ui) {
img = { key: 0, order: 0, url: '' }; //Single image model on server
imgs = new Array(); //An array to hold the image models.
//Iterate through all the List Items and build my model based on the data.
$('#UploaderThumbnails li').each(function (e) {
img.key = $(this).data('key'); //Primary Key
img.order = $(this).index(); //Order index
imgs.push(img); //put into "list" array
});
//And what is in the answer - this works really great
$.ajax({
url: '/Image/UpdateOrder',
data: JSON.stringify(imgs),
type: 'POST',
contentType: 'application/json; charset=utf-8'
});
}
而我的MVC控制器就是这么简单...
[HttpPost]
public ActionResult UpdateOrder(List<Models.Image> images)
{
//Images at this point is a proper C# List of Images! :) Easy!
return Content("");
}
文章来源: MVC 3 AJAX Post, List filled with Objects, but Objects Properties are Empty