我有以下问题:
在按钮上单击我将一些数据发送到服务器。 我的控制器Action看起来像这样:
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-Call:
var myEntries = { entries: [{ ParamA: "A", ParamB: "B" }, { ParamA: "C", ParamB: "D" }] };
$.ajax({
type: 'POST',
url: url,
cache: false,
data: myEntries,
dataType: 'text' });
我已经尝试过做的事情:
我在这里做错了什么?
非常感谢您提前帮助我!
修改
我的(Razor)视图此刻并不有意思,因为它与任何事情无关。我没有使用任何HTML.TextBoxFor(或类似的)方法来填充myEntries-Variable。它实际上是动态填充的(因为有很多条件)。 为了问题(以及我自己的测试),我对变量进行了硬编码。 :)
答案 0 :(得分:12)
通过您的回答和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'
});
答案 1 :(得分:5)
我得到了答案!
jQuery有时会让人感到困惑。
dataType是指定要从服务器获取BACK的内容的参数。 contentType是指示您发送给服务器的内容的参数。
所以从上面的例子中可以看出,如果你添加:
contentType:'application / json;字符集= UTF-8' ,
在AJAX调用中。
答案 2 :(得分:1)
只是为了补充有关如何创建将回发到控制器的列表的答案。那是因为您不需要使用列表名称包装数组。它看起来很丑,并且使用内置函数无法管理。此示例在此处显示如何回发MVC将理解并解释为List of的JSON。 (但即使数组被包装它仍然有效,但这是静态内容并且难以管理)
这个例子使用了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("");
}