asp.net-mvc - 使用 asp.net mvc 3 和 knockoutjs 发布 viewModel 并上传文件

标签 asp.net-mvc knockout.js

我们正在使用 knockoutjs postJson util 提交一个 asp.net mvc View 表单。一切正常,但现在我们想在表单中添加文件上传选项。

根据 Uploading file in asp.net mvc ,我们在 Form 中添加了元素和 enctype="multipart/form-data"属性,但是在 Controller 的 Request.Files 集合中没有得到任何文件

使用 ko.utils.postJson 有什么问题吗?有没有更好的方法来上传文件和我的表单数据?

  • 我所有的元素都使用 KO 绑定(bind),因此无法删除 knockout
  • 我们使用 postJson 以便它可以模拟表单提交,并且 Controller 可以重定向到另一个 View
  • 最佳答案

    postJson src 正在做 JSON.stringify在它创建的每个输入上并将其作为输入元素插入到内部表单元素中:

    for (var key in data) {
        var input = document.createElement("INPUT");
        input.name = key;
        input.value = ko.utils.stringifyJson(ko.utils.unwrapObservable(data[key]));
        form.appendChild(input);
    }
    

    因此,来自文件输入的文件数据无法通过 javascript 加载以通过 postJson 发布。调用当前存在的方法,因此您最好的选择是仅上传文件并在两个单独的请求中发布 JSON。也可以将文件输入注入(inject)此表单 postJson方法创建(通过覆盖该方法),但它的类型很hacky并且可能不向前兼容。

    关于asp.net-mvc - 使用 asp.net mvc 3 和 knockoutjs 发布 viewModel 并上传文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8151761/

    相关文章:

    javascript - 如何在 MVC 中的模型 View 中重置字段编辑器

    asp.net - 我如何从进程中慢慢迁移到使用 Redis 作为 session 状态提供程序?

    javascript - Knockout - 显示 javascript,而不是数据绑定(bind)值

    javascript - 更新 observableArray 不会更新 UI

    javascript - 在 KnockoutJS 和 HTML 中选择同一文件时,输入文件选择事件不会触发

    javascript - knockout 多个 View 模型 - 未定义

    javascript - 使用knockout js用户登录后显示用户名

    c# - 我该如何解决这个问题?单元类型存在于两个dll文件中

    javascript - knockout : changing options in select list without clearing value in view-model

    c# - 如何在 ASP.NET MVC C# 中为 jqPlot 图表返回多维数组作为 JSON