asp.net-mvc - 通过 MVC4 中的表单发布 JSON 数据

标签 asp.net-mvc json knockout.js asp.net-mvc-4

我正在尝试将一个 JSON 对象(一个 JSON 化的 knockout 模型,如果有任何相关性)发布到我的 MVC Controller ,并让 Controller 返回一个新 View 。为此,我使用表单发送数据。问题是我希望在 Controller 收到 JSON 时自动将其转换为模型。

如果我为此使用 AJAX 调用,

var actionModel = new Object();
actionModel.Controls = ko.toJS(self.controls());
var json = JSON.stringify(actionModel);
$.ajax({
    url: "MyController/Preview",
    type: "POST",
    contentType: 'application/json; charset=utf-8',
    cache: false,
    data: json,
    success: function (data) {
    }
});

...JSON 对象已成功反序列化并转换为我的模型类的实例。

public ActionResult Preview(ActionModel actionModel) { ... }
public class ActionModel
{
    public List<ControlModel> Controls { get; set; }
}

如果我想使用表单执行此操作,我知道我需要将 JSON 插入到隐藏的输入字段中,但执行此操作时我能管理的最好方法是将数据作为序列化字符串接收:

@using (Html.BeginForm("Preview", "MyController", FormMethod.Post, new { id = "previewForm" }))
{
    <input type="hidden" id="hiddenFieldName" />
}

public ActionResult Preview(string hiddenFieldName) { ... }

我可以稍后反序列化它,但如果 MVC 可以为我转换它,我真的更喜欢它,就像 AJAX 调用一样。这可能吗?

谢谢。

最佳答案

假设您想使用表单发布编码为 json 的数据而不使用 XHR,我认为这是不可能的。

表单不允许多种内容类型。 http://www.w3.org/TR/html401/interact/forms.html#form-content-type

如果您将 json 作为字符串发布,则可能可以创建一个模型绑定(bind)器来查找看似 json 的字符串并在那里处理反序列化。这不是最漂亮的事情,特别是如果这只是针对某些奇怪的情况。

关于asp.net-mvc - 通过 MVC4 中的表单发布 JSON 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13196645/

相关文章:

asp.net-mvc - 为 "simple"SaaS 启动选择 ORM (ASP.NET MVC)

javascript - JSON 输出在代码中仍未定义,但警报正常,这是范围问题吗?

javascript - 如何在本地浏览器中存储数据并从中检索数据

javascript - 在 AngularJS 中读取非 JSON 文件

javascript - 将 Knockout.js 模型应用于多个元素

knockout.js - 如何使用映射插件进行 knockout ?

asp.net-mvc - Entity Framework 6 中仅带有外键的表(Fluent Api)

c# - MVC 应用程序中的自定义声明身份管理

javascript - 在 Knockout 样式绑定(bind)中使用 javascript 函数

jquery - MVC - ClientValidationEnabled = true,但仍然有回发,毁了我的 jQuery