【问题标题】:Binding HttpPostedFileBase using Ajax.BeginForm使用 Ajax.BeginForm 绑定 HttpPostedFileBase
【发布时间】:2011-01-30 06:41:21
【问题描述】:

我有一个表单,它使用 HttpPostedFileBase 的默认绑定器绑定模型和文件上传。

这在使用 Html.BeginForm() 时可以正常工作。但是,我想使用 AJAX 执行相同的操作,因此我将其替换为 Ajax.BeginForm() 相应地更改参数。

模型仍然正确绑定,但是我无法将文件上传绑定到 HttpPostedFileBase。

这将模型和文件上传绑定:

<% using (Html.BeginForm("MapUpdateColumns", "RepositoryAdmin", FormMethod.Post, new { id = "UpdateDataset", enctype = "multipart/form-data" })) {%>

这只会绑定模型:

<% using (Ajax.BeginForm("MapUpdateColumns", "RepositoryAdmin", new AjaxOptions { UpdateTargetId = "columnMappings" }, new { id = "UpdateDataset", enctype = "multipart/form-data" })) {%>

控制器动作:

public ActionResult MapUpdateColumns(DatasetViewModel model, HttpPostedFileBase sourceFile)

这应该可行吗?如果可以,我做错了什么?谢谢。

【问题讨论】:

    标签: asp.net-mvc ajax model-binding


    【解决方案1】:

    您无法使用 AJAX 上传文件。实现此目的的一种方法是使用隐藏的 iframe,它将模拟 AJAX 调用并执行实际的文件上传或使用 Flash。这是一个非常棒的jQuery Form 插件,它使用了一个隐藏的 iframe,它能够透明地对包含文件字段的表单提交进行 ajaxify。

    【讨论】:

    • 感谢您解决这个问题。我前段时间使用了那个 jQuery Form 插件,所以我自己应该记得这个!干杯。
    【解决方案2】:

    有可能,答案就在这里:

    https://stackoverflow.com/a/13522052/1067149

    我自己做的,它保证它有效。

    【讨论】:

      【解决方案3】:

      在您的标签输入中添加id="file"

      在您的操作结果参数中 HttpPostedFileBase '文件' 名称和视图标签名称应该相同

              [HttpPost]
              [ValidateAntiForgeryToken]
              public ActionResult Create(tbl_products tbl_products,HttpPostedFileBase file)
              {
                  if (ModelState.IsValid)
                  {
                      tbl_products.phototype = file.ContentType;
                      tbl_products.photo =new byte[file.ContentLength ];
                      file.InputStream.Read(tbl_products.photo,0, file.ContentLength);
      
                      if(obj.insert(tbl_products))
                      {
                      return RedirectToAction("Index");
                      }
                      else
                      {
                          return new HttpStatusCodeResult(HttpStatusCode.Forbidden);
                      }   
                  }
      
                  return View(tbl_products);
              }
      

      它适合我

      【讨论】:

      • 你为什么大喊大叫?
      • 对不起,我的互联网一直断开连接,我大声回答提到的问题
      【解决方案4】:

      是的,我也同意。您绝对可以使用 'Ajax.BeginForm' 上传文件。将 'enctype = "multipart/form-data"' 添加到 AjaxOptions 对象。

      【讨论】:

        猜你喜欢
        • 2013-02-08
        • 2015-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-17
        • 1970-01-01
        • 1970-01-01
        • 2023-03-09
        相关资源
        最近更新 更多