我遇到了这样的问题:在一个视图中,我有一个按钮上传,上传图像并将其存储到某个文件夹。有没有办法调用动作上传,但不能返回视图?只是为了保存那些内容,然后我有另一个按钮,它会将我重定向到一个新视图。我尝试使用返回类型void,但它将我发送到空白页面。
这是上传和下一个
的表单按钮@using (Html.BeginForm("Upload", "Account", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.AntiForgeryToken()
<div class="form-group">
@Html.LabelFor(model => model.Picture, new { @class = "col-md-2 control-label" })
<div class="col-md-10">
<span class="btn btn-primary btn-file">
Choose <input type="file" name="file" />
</span>
<input type="submit" value="Upload" name="buttonName" class="btn btn-primary"/>
</div>
</div>
}
@using (Html.BeginForm("Next", "Account", FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
@Html.AntiForgeryToken()
<div class="form-group">
<div class="col-md-10">
<input type="submit" value="Next" name="buttonName" class="btn btn-default" />
</div>
</div>
}
这是行动:
public void Upload(HttpPostedFileBase file, string btnSubmit)
{
if (file != null && file.ContentLength > 0)
{
var fileName = Path.GetFileName(file.FileName);
var path = Path.Combine(Server.MapPath("~/Images/"), fileName);
file.SaveAs(path);
}
}
答案 0 :(得分:0)
您可以使用Content()
方法返回ContentResult
ContentResult默认情况下返回text / plain作为其contentType。
public ActionResult Upload(HttpPostedFileBase file, string btnSubmit)
{
if (file != null && file.ContentLength > 0)
{
var fileName = Path.GetFileName(file.FileName);
var path = Path.Combine(Server.MapPath("~/Images/"), fileName);
file.SaveAs(path);
}
return Content("Success");
}
答案 1 :(得分:0)
您可以返回EmptyResult。
MVC希望您在具体操作时使用EmptyResult 打算什么也不返回。与之前的所有ActionResults不同 但是,EmptyResult没有帮助器。另外,如果一个动作 返回null,MVC将检测到它并使其返回EmptyResult。
答案 2 :(得分:0)
好的,我搜索了这个,我认为我需要一些没有刷新页面的ajax。我找到了File upload using MVC 4 with Ajax。我会试着看看它是否有效。
答案 3 :(得分:0)
正确的解决方案是使用:
return new HttpStatusCodeResult(HttpStatusCode.OK);
表示已收到上传并且所有处理均已完成。
return new HttpStatusCodeResult(HttpStatusCode.Accepted);
表示已收到上传,并将继续进一步处理。