我故意不在控制器参数中使用绑定,所以我有一个看起来像这样的控制器:
[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数据库。所以....我故意不想要模型绑定,我希望序列化的字符串作为pamameter。当我发布时,为什么我的serializedformdata字符串为空?
注意 - 我也尝试使用
绑定到Dictionarypublic ActionResult UntypedForm(Dictionary<string,string> serializedformdata)
{
//// ...
}
但serializedformdata仍为空。
答案 0 :(得分: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"];