0

我找到了许多将 1 个对象数组发布到 MVC 的答案,但我正在努力解决多个问题。这可能是我想念的小东西。

这是我的 JS:

 $.ajax({
                type: "POST",
                url: encodeURI("<%:Url.Action("SaveSimulator")%>"),
                data: JSON.stringify({ 
                    gevelshapes: (gevelshapes), 
                    gevelgaten:(gevelgaten),
                    dakshapes:(dakshapes),
                    dakgaten:(dakgaten),
                    dakrandshapes:(dakrandshapes), 
                    dakrandgaten:(dakrandgaten) 
                }),
                success: function(data){
                    $("form").submit();
                },
                contentType: 'application/json',
                dataType: "json"
            });

这些是包含具有 x 和 y 坐标的对象的数组。像这样:

var gevelshapes = [{ x: "1", y: "2" },{ x: "2", y: "1" }];

我的 MVC 控制器如下所示:

[HttpPost]
    public JsonResult SaveSimulator(List<Coordinaat> gevelshapes , List<Coordinaat> dakrandshapes, List<Coordinaat> dakshapes,List<Coordinaat> gevelgaten , List<Coordinaat> dakrandgaten, List<Coordinaat> dakgaten)
    {

        //do something 
    }

我遗漏了一些东西,因为 MVC 认为它List<Coordinaat> gevelshapes有 1 个带有空 x 和 y 字符串的对象,而不是带有 2 个“coordinaat”对象的数组。

任何帮助都会很棒:)

4

1 回答 1

0

也许我错了,但 mvc 不会自动解析 Json 字符串。试试这样:

 $.ajax({
            type: "POST",
            url: encodeURI("<%:Url.Action("SaveSimulator")%>"),
            data: { x : JSON.stringify({ 
                gevelshapes: (gevelshapes), 
                gevelgaten:(gevelgaten),
                dakshapes:(dakshapes),
                dakgaten:(dakgaten),
                dakrandshapes:(dakrandshapes), 
                dakrandgaten:(dakrandgaten) 
            }) },
            success: function(data){
                $("form").submit();
            },
            contentType: 'application/json',
            dataType: "json"
        });

[HttpPost]
public JsonResult SaveSimulator(string x)
{
     var serializer = new JavaScriptSerializer();
     var result = serializer.Deserialize<object>(x); // You can cast to your preffered class
     // ...
}
于 2012-10-05T14:37:36.377 回答