【问题标题】:Passing unstructured JSON between jQuery and MVC Controller Actions在 jQuery 和 MVC 控制器操作之间传递非结构化 JSON
【发布时间】:2012-05-28 16:22:05
【问题描述】:

有很多关于 MVC 模型绑定的有用信息。 我的问题源于我试图避免在我的 MVC 应用程序中创建强类型数据,因为它主要需要充当数据路由器。

基本上,我在一个页面上有一组字段,带有一个“输入”类,我可以用jQuery('.input') 收集这些字段,迭代并填充到一个 javascript 对象中。然后我将它发送到我的 ASP.NET MVC 控制器:

var inputData = my_serialize( $('input');
$.ajax({
  type:'POST',
  url: '/acme/Ajax/CaptureInput',
  dataType: "json",
  data: { inputData: JSON.stringify(inputData) },
  success: Page_Response_RegisterAndDeposit,
  error: Page_AjaxError
});

在 C# 方面,我有

public JsonResult CaptureInput(string inputDataAsJsonString)
{
  JavaScriptSerializer JSON = new JavaScriptSerializer();
  object inputData = JSON.DeserializeObject(inputDataAsJsonString);

这似乎是一种浪费的间接级别,我更愿意将数据作为 contentType:application/json 传递,并让 CaptureInput 接受 objectIDictionary 甚至 dynamic

【问题讨论】:

标签: c# asp.net-mvc json


【解决方案1】:

您可以使用serializeArray 方法。假设您有一个包含任何类型的输入元素的表单,并且您想要调用以下控制器操作:

public ActionResult CaptureInput(Dictionary<string, string> values)
{
    ...
}

您可以按照以下方式进行操作:

<script type="text/javascript">
    var values = $('form').serializeArray();
    var data = {};
    $.each(values, function (index, value) {
        data['[' + index + '].key'] = value.name;
        data['[' + index + '].value'] = value.value;
    });

    $.ajax({
        url: '@Url.Action("CaptureInput")',
        type: 'POST',
        contentType: 'application/json',
        data: JSON.stringify(data),
        success: function (result) {
            alert('success');
        }
    });
</script>

【讨论】:

    【解决方案2】:

    不完全是你所追求的,但也许这个问题的解决会给你一个部分解决方法,允许你绑定到一个带有嵌入式字典的简单包装器对象。它甚至可能允许直接绑定到字典。不确定... 您可能还需要在 $.ajax 调用中显式设置 json ContentType 标头

    "JSON model binding for IDictionary<> in ASP.NET MVC/WebAPI"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-03
      • 1970-01-01
      相关资源
      最近更新 更多