【问题标题】:MVC3 - Post files via AJAX & JSON without a formMVC3 - 通过 AJAX 和 JSON 发布文件,无需表单
【发布时间】:2011-05-20 21:05:04
【问题描述】:

我有一个从客户端接收复杂 JSON 对象的操作方法。我在客户端序列化这个对象,由于复杂性,我不能(不想)使用表单提交来发布数据。

我还需要能够连同这个 ajax 请求一起发送文件。我的操作方法完美地工作并使用 jQuery.ajax() 很好地绑定 JSON 对象(实际上是对象列表)。当我移动到ajax form plugin 以便我可以发送文件时,对象绑定会中断。我尝试使用插件提交表单并将我的对象作为附加数据发送。 action 方法不再看到我的对象。

关于如何将 JSON 和文件一起发布到同一个操作方法有什么想法吗?

这是有效的 jQuery.ajax() 方法。这里没有提交表单,这只是向服务器发送 JSON 数据

$.ajax({
            url: "/Controller/Create2",
            type: 'POST',
            data: JSON.stringify(model),
            dataType: 'json',
            contentType: 'application/json, charset=utf-8',
            beforeSend: function () {

            },
            success: function (data) {

            },
            error: function () {


            }
        });

我的 Action 方法以这种方式完美地获取对象列表。

public ActionResult Create2(List<CreateModel> model)
{
       //Do stuff

}

但是当我在表单上执行 ajax 提交并附加数据时,模型返回 null。

f.ajaxSubmit({
            url: "/Controller/Create2",
            type: "POST",
            data: JSON.stringify(model),
            dataType: 'json',
            contentType: 'application/json, charset=utf-8',
            beforeSend: function () {

            },
            success: function (data) {

            },
            error: function (data) {

            }
        });

我需要在 Action Method 中保留绑定到 JSON 对象的功能,这是否意味着我必须放弃发布文件?

【问题讨论】:

  • 第二种方法中你要发布的文件在哪里?
  • 该文件是表单 (f) 的一部分。抱歉,不清楚。 ajaxSubmit 插件(我在上面链接过)负责通过隐藏的 iFrame 技术发布文件
  • 只要它是一个插件,你如何在你可能导入的 .js 中查看它的源代码,看看它是如何序列化/发布文件的,然后将它的那部分提取到你自己的客户端的方法。然后使用你的第一个有效的 AJAX 方法,发布你的序列化模型,以及一个以插件方式序列化的文件,然后将第二个参数添加到你的 Action 方法。
  • 你从哪里/如何得到这个 model javascript 变量,你试图 JSON 字符串化?你是手动构建的吗?如果是,数据来自哪里?用户可以通过一些 UI 修改这个变量中包含的数据吗?如果是,可能它们应该直接成为您提交的表单的一部分。如果不是,它们也可能是您提交的表单的一部分,但作为隐藏字段,甚至更好的是作为包含 id 的单个隐藏字段,允许您从它们最初来自的任何位置重新获取服务器上的这些值。
  • 表格是动态的。用户可以添加和删除许多不同的字段,还可以提交具有不同数量的自定义字段的多个对象。我的第一个版本试图通过 html 属性来索引和跟踪所有这些,但它太多了。允许用户完成所有工作,然后在他们尝试提交时序列化对象,这样会更简洁。

标签: jquery asp.net-mvc ajax json


【解决方案1】:

【讨论】:

  • 您应该提及这两个程序的作用以及它们为何相关。
猜你喜欢
  • 2021-03-30
  • 2018-03-12
  • 2015-11-04
  • 1970-01-01
  • 2016-02-19
  • 1970-01-01
  • 2013-03-04
  • 2018-11-13
  • 2018-08-21
相关资源
最近更新 更多