Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
json的asp.net mvc 3 ViewModel集合属性不起作用_Json_Asp.net Mvc 3 - Fatal编程技术网

json的asp.net mvc 3 ViewModel集合属性不起作用

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

各位晚上好。我目前正在使用MVC 3,我有一个viewmodel,其中包含一个列表属性。我目前正在使用json2的JSON.stringify方法将viewmodel传递给action方法。在调试时,我注意到所有简单属性都通过了,但是集合属性是空的,尽管我确信集合中至少有一个对象。我想知道是否有人遇到了同样的问题。下面是我用来发布到action方法的代码:

$.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();
        }
    }
);