jquery - Amplifyjs 发布表单数据

标签 jquery html asp.net-mvc-4 knockout.js amplifyjs

我是网络开发的新手,在将文件保存到数据库时遇到了问题。我正在使用 MVC 4、knockoutjs 2.3.0、jquery 2.03 和 amplifyjs 1.1.0。

这是我希望它完成的方式。

在我的上传页面中,我有一个表单:

<form id="uploadForm" name="uploadForm" action="~/Administration/UploadReports"       method="post" enctype="multipart/form-data">
    <input required type="file" name="fileToUpload" id="fileToUpload" accept="html, image/jpeg">
        <input type="submit" data-bind="click:submit" value="Ladda upp fil" />
        <input type="reset" value="Avbryt" />
    </form>

然后在我的 knockoutViewModel 中有以下代码:

 this.submit = function (model, element) {
                var test = $('#uploadForm')[0];
                var formData = new FormData(test);

                amplify.request({
                    resourceId: "uploadReport",
                    success: () => {
                        console.log("success");
                    },
                    error: () => {
                        console.log("error");
                    },
                    data: formData 
                });                   
            };

到目前为止一切正常。当我按下表单中的按钮时,我就到了这里。但我认为 amplifyjs 正在用我的数据表单做一些事情...... Amplify.request 定义如下:

amplify.request.define('uploadReport', 'AJAX', {
    url: '/Administration/UploadReports',
    type: 'POST',
    contentType: false,
    processData: false,
    cache: false
});

在我的 Controller 中它看起来像这样:

    [HttpPost]
    public ActionResult UploadReports(HttpPostedFileBase fileToUpload)
    {

        //Update the list of files
        var model = new AdministrationViewModel();

        byte[] result;

        using (var streamReader = new MemoryStream())
        {
            fileToUpload.InputStream.CopyTo(streamReader);
            result = streamReader.ToArray();
        }

        model.BetFiles = FileInserter.InsertFile(fileToUpload.FileName, fileToUpload.ContentType, fileToUpload.ContentLength, result).Value;


        return View("Reports", model);
    }

谁能帮我看看是什么问题?

问候,大卫


这是我得到的:

enter image description here

这是我期望得到的:

enter image description here

最佳答案

目前amplify.js 1.1.2版本不支持FormData

检查这个问题 https://github.com/appendto/amplify/issues/107

可能的解决方案是修改这个事件订阅中的库

amplify.subscribe( "request.ajax.preprocess", function(defnSettings, settings, ajaxSettings) {
        var mappedKeys = [],
            data = ajaxSettings.data;

        if (typeof data === "string" || Object.prototype.toString.call(data) === "[object FormData]") {
            return;
        }
......(omited)
)}

如果是原生 FormData 对象,那么 amplify 将忽略传递的对象。请求定义中的设置必须包含以避免 jQuery 再次干扰您的 FormData 对象

contentType: false
cache: false
processData: false

关于jquery - Amplifyjs 发布表单数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22509583/

相关文章:

jquery - 我有带下拉菜单的 CSS 菜单,但是我的下拉菜单被我的 jquery 幻灯片阻止了,有什么办法可以修复它?

javascript - 如何将 javascript postData 转换为 Python 列表?

asp.net-mvc - MVC 4 移动检测 View 与布局不同

asp.net-mvc-4 - 如何将.patch文件应用到项目中?

javascript - onchange/onclick 函数不适用于复选框

asp.net - MVC 4 从资源设置属性值

javascript - jQuery 对话框未完全显示

jQuery触发点击无限循环

javascript - Firefox 中的 HTML 位置问题(适用于 IE 和 Chrome)

jquery - Firefox 不允许空白的 contenteditable 区域