6

我有一个表单,它使用 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)

这应该是可能的,如果是这样,我做错了什么?谢谢。

4

4 回答 4

10

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

于 2010-03-22T11:10:25.067 回答
2

有可能,答案在这里:

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

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

于 2012-11-23T01:21:54.073 回答
0

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

在您的 ACTIONRESULT PARAMETER HttpPostedFileBase 'file' 名称和视图标记名称应该相同

        [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);
        }

这个对我有用

于 2016-08-21T22:48:30.417 回答
-1

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

于 2014-03-08T17:49:38.010 回答