Asp.net mvc 3 mvc3文件上传

Asp.net mvc 3 mvc3文件上传,asp.net-mvc-3,file-upload,Asp.net Mvc 3,File Upload,每当我尝试将文件上载到服务器时,当前视图将重定向到与控制器不同的视图。如何上传文件并保持在同一视图上 我尝试了以下代码: public Action Result(HttpPostedFileBase file) { return new EmptyResult(); } 应按预期工作,返回名为Result的视图 如果当前操作方法不是要返回的视图,则可以使用: return RedirectToAction("actionmethodname"); 我建议使用类似异步上传的东西。这样,您

每当我尝试将文件上载到服务器时,当前视图将重定向到与控制器不同的视图。如何上传文件并保持在同一视图上

我尝试了以下代码:

public Action Result(HttpPostedFileBase file)
{
  return new EmptyResult();
}
应按预期工作,返回名为Result的视图

如果当前操作方法不是要返回的视图,则可以使用:

return RedirectToAction("actionmethodname");

我建议使用类似异步上传的东西。这样,您就可以在不重定向的情况下进行上载,甚至在上载完成时查看图像/文档

它允许通过不同的方法进行多次上载和回退,以成功上载文件


对于实现,您只需创建另一个控制器来处理上传。

在MVC Architecture中检查我的代码以提交文章

public ActionResult Submit(ArticleViewModel newSubmit, HttpPostedFileBase uploadFile)
{
    if (ModelState.IsValid)
    {
        //Upload File
        if (uploadFile != null)
        {
            string fileName = uploadFile.FileName;
            newSubmit.Article.image = fileName;
            uploadFile.SaveAs("~/Content/Uploads/Images");
            string savedFileName = Path.Combine(Server.MapPath("~/Content/Uploads/Images"), uploadFile.FileName);
        }
    // The HTML comes encoded so we decode it before insert into database
    newSubmit.Article.content = HttpUtility.HtmlDecode(newSubmit.Article.content);
    //Set article flags
    newSubmit.Article.flagged = true;
    newSubmit.Article.finished = false;
    newSubmit.Article.submitStoryFlag = true;
    //Insert article in the database                _repository.AddArticle(newSubmit);
    return View("Submitted");
}
    else
    {
       // Invalid – redisplay with errors
       return View(newSubmit);
    }
}

假设您的视图名为UploadView.cshtml,并且从那里开始上载文件

UploadView.cshtml

@using (Html.BeginForm("UploadFile", "MyController", FormMethod.Post, new { enctype = "multipart/form-data", id = "frm", name = "frm" }))
{
<input id="FileAttachments" type="file" name="FileAttachments" />&nbsp;&nbsp; 
<input type="submit" value="upload" />
}

使用View()时,文件文本框中的文件路径将被删除。@sam您需要在响应后用适当的值填充“文本框”。您可以使用ViewBag来实现这一点。记住mvc!=webformssince其输入类型为文件我可以获取路径但无法设置path@sam使用
ViewBag
设置输入字段的文件名:
ViewBag.filename=file.filename
然后在视图中将输入字段值属性设置为
ViewBag.FileName
属性。
@using (Html.BeginForm("UploadFile", "MyController", FormMethod.Post, new { enctype = "multipart/form-data", id = "frm", name = "frm" }))
{
<input id="FileAttachments" type="file" name="FileAttachments" />&nbsp;&nbsp; 
<input type="submit" value="upload" />
}
[HttpGet]
public ActionResult UploadView()
{
   Return View();
}

[HttpPost]
public ActionResult UploadFile(HttpPostedFileBase FileAttachments)
{
    if (FileAttachments != null)
    {
       string fileName = System.Guid.NewGuid().ToString() + Path.GetFileName(FileAttachments.FileName);
       fileName = Path.Combine(Server.MapPath("~/Content/Files"), fileName);
       FileAttachments.SaveAs(fileName);
    }
    return View("UploadView");
}