C# 将JSON发布到MVC控制器-字符串参数为null

C# 将JSON发布到MVC控制器-字符串参数为null,c#,asp.net-mvc,asp.net-mvc-3,asp.net-ajax,C#,Asp.net Mvc,Asp.net Mvc 3,Asp.net Ajax,我有意尝试在控制器参数中不使用绑定,因此我有一个控制器,看起来像: [HttpPost] public ActionResult UntypedForm(String serializedformdata) { //// ... } 当我使用以下代码将序列化的JSON表单元素发布到控制器时: var formelements = $('#form').serializeArray(); $.post(url, formeleme

我有意尝试在控制器参数中不使用绑定,因此我有一个控制器,看起来像:

 [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获取空值。但是,当我用强类型对象替换String serializedformdata时,绑定工作正常

我的控制器的全部要点是通用JSON POST,在这里我将创建一个BSON文档以放入Mongo数据库。所以…我故意不想要模型绑定,我想要序列化的字符串作为pamameter。为什么我的serializedformdata字符串在发布时为空

注意-我还尝试用

public ActionResult UntypedForm(Dictionary<string,string> serializedformdata)
            {
            //// ...
            }
public ActionResult非类型化表单(字典序列化为数据)
{
//// ...
}

但是serializedformdata仍然为空。

函数
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"];
var obj=(List)new JavaScriptSerializer();
Dictionary dict=obj.First();
字符串someval=dict[“somekey”];

但是post和“json”参数不执行自己的字符串化吗?我明白你的意思,并同意serializeArray创建了一个JS对象,但该对象肯定是通过post序列化的?@goldfinger是的,它是通过post序列化的,但它不是按照你想要的方式序列化的。JSON键必须与操作的参数匹配。因此,您可以翻转我的方法,将动作的参数更改为表单中的
name
属性,这也应该有效。非常感谢您的解释!我有点惊讶地看到,我需要在客户端字符串化和控制器参数名称上匹配确切的名称“serializedformdata”。显然,控制器不仅仅是泛型绑定字符串,而是在键“serializedformdata”上进行文本匹配?有没有类似dotnet 3.5的示例?