需要使用asp.net mvc3 html5 razor在ajax.beginform中进行uploadcontrol

时间:2012-10-08 13:41:13

标签: c# asp.net asp.net-mvc-3 html5 razor

我一直在寻找很长时间,但我仍然陷入困境,我需要有一个上传控件,用户可以上传文档并提供其他信息。

我没有上传控件之前必须这样做,所以我做的是得到一个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的情况下完成这项工作?

1 个答案:

答案 0 :(得分:0)

您需要在表单内部上传文件,并在调用uploadfile的表单上使用enctype =“multipart / form-data”属性。这可能是一个问题。

此外,您可以使用JavaScript从页面的其他部分提交所需的表单,而无需嵌套并保留您的设计。