我有结合模型,并使用默认粘合剂的文件上传用于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)

如果这是可能的,如果是这样我究竟做错了什么?感谢。

有帮助吗?

解决方案

您无法用AJAX上传文件。实现这一目标的一个方法是使用一个隐藏的iframe,这将模拟一个AJAX调用和执行实际的文件上传或使用Flash。这里是一个非常不错的 jQuery的表格插件使用隐藏的iframe,它能够透明地ajaxifying一个的含文件字段的表单提交。

其他提示

这是可能的答案是这里:

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

我做到了我自己和它保证它的工作原理。

在您的代码输入ADD id="file"

在的ActionResult PARAMETER 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);
        }

它为我

是的,我也同意。可以肯定上传使用“Ajax.BeginForm'.Add‘ENCTYPE =‘多部分/格式数据’’与AjaxOptions目标文件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top