json的asp.net mvc 3 ViewModel集合属性不起作用
各位晚上好。我目前正在使用MVC 3,我有一个viewmodel,其中包含一个列表属性。我目前正在使用json2的JSON.stringify方法将viewmodel传递给action方法。在调试时,我注意到所有简单属性都通过了,但是集合属性是空的,尽管我确信集合中至少有一个对象。我想知道是否有人遇到了同样的问题。下面是我用来发布到action方法的代码:json的asp.net mvc 3 ViewModel集合属性不起作用,json,asp.net-mvc-3,Json,Asp.net Mvc 3,各位晚上好。我目前正在使用MVC 3,我有一个viewmodel,其中包含一个列表属性。我目前正在使用json2的JSON.stringify方法将viewmodel传递给action方法。在调试时,我注意到所有简单属性都通过了,但是集合属性是空的,尽管我确信集合中至少有一个对象。我想知道是否有人遇到了同样的问题。下面是我用来发布到action方法的代码: $.post("/ReservationWizard/AddVehicleToReservation/", JSON.str
$.post("/ReservationWizard/AddVehicleToReservation/",
JSON.stringify('@ViewData["modelAsJSON"]'),
function (data) {
if (data != null) {
$("#vehicle-selection-container").html(data);
$(".reservation-wizard-step").fadeIn();
}
});
对象@ViewData[“modelAsJSON”]
包含以下json并传递给我的操作方法
{“NumberOfVehicles”:1,“VehiclesToService”:[{“VehicleMakeId”:0,“VehicleModelId”:0}]}
正如您所看到的,属性“VehiclesToService”有一个对象,但当它到达我的操作方法时,它不会转换为集合中相应的对象,而是集合为空
如果有人对这个问题有任何见解,我们将不胜感激
提前谢谢
更新
在进行建议的更改并调用newJavaScriptSerializer().Serialize(@Model)
之后,这是最终通过post发送到我的操作方法的字符串
'{“NumberOfVehicles”:1,“VehiclesToService”:[{“VehicleMakeId”:0,“VehicleModelId”:0}]}'
我可以调试并查看发送到action方法的对象,但collection属性也是空的,我知道集合中至少有一个对象
AddVehicleToReservation操作方法声明如下:
public ActionResult AddVehicleToReservation(车辆选择)
{
...
返回PartialView(“视图名称”,模型);
}
问题出在这里:
JSON.stringify('@ViewData["modelAsJSON"]')
JSON.stringify
是一个客户端函数,您将作为参数传递一个存储在ViewData中的列表,因此我认为它最终会调用.ToString()
,而您
JSON.stringify('System.Collections.Generic.List<Foo>')
因此,要实现这一点,您首先需要将此ViewData序列化为JSON。您可以使用该类来执行以下操作:
@{
var myList = new JavaScriptSerializer().Serialize(ViewData["modelAsJSON"]);
}
$.post(
'@Url.Action("AddVehicleToReservation", "ReservationWizard")',
// Don't use JSON.stringify: that makes JSON request and without
// proper content type header your sever won't be able to bind it
@myList,
function (data) {
if (data != null) {
$('#vehicle-selection-container').html(data);
$('.reservation-wizard-step').fadeIn();
}
}
);
请不要使用此
ViewData
。将视图设置为强类型并使用视图模型。添加Vehicletoreservation方法的外观如何?
@{
var myList = new JavaScriptSerializer().Serialize(ViewData["modelAsJSON"]);
}
$.post(
'@Url.Action("AddVehicleToReservation", "ReservationWizard")',
// Don't use JSON.stringify: that makes JSON request and without
// proper content type header your sever won't be able to bind it
@myList,
function (data) {
if (data != null) {
$('#vehicle-selection-container').html(data);
$('.reservation-wizard-step').fadeIn();
}
}
);