1

我故意尝试不在控制器参数中使用绑定,所以我有一个看起来像这样的控制器:

 [HttpPost]
        public ActionResult UntypedForm(String serializedformdata)
        {
        //// ...
        }

当我使用以下代码将序列化的 JSON 表单元素发布到控制器时:

var formelements = $('#form').serializeArray();
$.post(url, formelements, function (data) {

    }, "json").error(function () {
        alert("Error posting to " + url); 
    });

我在控制器上获得了 String serializedformdata 的 NULL 值。但是,当我用强类型对象替换 String serializedformdata 时,绑定按预期正常工作。

我的控制器的重点是通用 JSON 帖子,我将在其中创建一个 BSON 文档以放入 Mongo 数据库。所以....我故意不想要模型绑定,我想要序列化的字符串作为参数。为什么我发布时我的 serializedformdata 字符串为空?

注意 - 我也尝试绑定到 Dictionary with

public ActionResult UntypedForm(Dictionary<string,string> serializedformdata)
            {
            //// ...
            }

但 serializedformdata 仍然为空。

4

1 回答 1

2

该函数serializeArray使用表单的键/值对创建一个 Javascript 对象。你不想要那个,你想要一个带有serializedformdata=(JSON 字符串)的键/值。即,像这样;

var formelements = { serializedformdata: JSON.stringify($('#form').serializeArray()) };

这会将原始 JSON 字符串传递给控制器​​的参数。您可以使用JavaScriptSerializer来获取服务器上的对象:

var obj = (List<Dictionary<string,string>>)new JavaScriptSerializer().Deserialize(serializedformdata, typeof(List<Dictionary<string,string>>));
Dictionary<string,string> dict = obj.First();
string someval = dict["somekey"];
于 2012-09-22T02:03:01.820 回答