使用form.submit()将复杂的Json发送到带有对象参数的控制器

时间:2014-07-18 09:13:10

标签: c# jquery ajax json

我正在尝试使用以下类型的形式发送复杂的Json:

{  
   "Success":false,
   "ErrorMessage":{  
      "ErrorMessage":"Some Message",
      "ErrorType":"Serialization Failed",
      "SiteReportDescription":"Some Desc",
      "Status":false
   },
   "Result":null
}

到以下控制器:

[Authorize, HttpPost]
public ActionResult DoThing(ThingModel model)
{
    return Json(true);
}

接受以下模型(ThingError是json中提到的四个字段的另一个对象):

public class ThingModel
{
    public bool Success { get; set; }

    public ThingError ErrorMessage { get; set; }

    public ThingResult Result { get; set; }
}

我已使用以下两种方法与此Controller进行通信:

    var form = $('<form method="post" enctype="multipart/form-data" style="visibility:hidden;"><input type="submit" name="model" /></form>');
        $(document.body).append(form);
        form.attr("action", '@Url.Action("DoThing", "Script")');
        form.find("input[name='model']").val(JsonString);
        form.submit();

        $.ajax({
            type: 'POST',
            url: '@Url.Action("DoThing", "Script")',
            contentType: "application/json; charset=utf-8",
            processData: false,
            dataType: 'json',
            data: JsonString,
            success: function (result) { }
            },
        });

这两种通信方法都将与控制器进行交互,但只有Ajax请求才会发送转换为控制器对象ThingModel的json字符串,form.submit只会将其保留为null。这背后的原因是什么?我在表格中做错了吗?

1 个答案:

答案 0 :(得分:2)

你需要在小提琴手中捕捉这个,以便了解原因。

基本上,ajax调用正在传递:

{“Something”:“123”}

而形式正在传递这个:

{“Model”:{“Something”:“123”}}

不一样。