结合HttpPostedFileBase使用Ajax.BeginForm
-
21-09-2019 - |
题
我有结合模型,并使用默认粘合剂的文件上传用于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一个的含文件字段的表单提交。
其他提示
在您的代码输入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目标文件。
不隶属于 StackOverflow