我一直在寻找很长时间,但我仍然陷入困境,我需要有一个上传控件,用户可以上传文档并提供其他信息。
我没有上传控件之前必须这样做,所以我做的是得到一个ajax.beginform,它将把用户的所有输入提供给控制器,然后通过onsucces函数关闭弹出窗口,所以这看起来像这样:
视图:
@using (Ajax.BeginForm("Save", "Documents", new AjaxOptions { HttpMethod = "Post", OnSuccess = "CloseDialog" }, new { @class = "form-inline", id = "FormId" }))
{
@Html.Label("Description", "Description")
<div class="span3">
@Html.TextBoxFor(m => m.Description)
</div>
}
我尝试添加一个Html.BeginForm然后我发现不可能使用嵌套表单,所以我删除了它。
在我的控制器中我有:
public PartialViewResult Index(string description)
{
var model = new DocumentsModel{ Description = description};
return PartialView(model);
}
[HttpPost]
public ActionResult UploadFile(HttpPostedFileBase file, string description)
{
if (file != null && file.ContentLength > 0)
{
var fileName = Path.GetFileName(file.FileName);
var path = Path.Combine(Server.MapPath(@"D:\Documentds\"), fileName);
file.SaveAs(path);
}
return RedirectToAction("Index", new { description = description });
}
当然,因为html.beginform不能工作,这种控制措施也不会起作用 所以我的问题是如何在不使用html.beginform的情况下完成这项工作?
答案 0 :(得分:0)
您需要在表单内部上传文件,并在调用uploadfile的表单上使用enctype =“multipart / form-data”属性。这可能是一个问题。
此外,您可以使用JavaScript从页面的其他部分提交所需的表单,而无需嵌套并保留您的设计。