在控制器中执行操作无效

时间:2015-12-09 22:03:16

标签: c# model-view-controller

我遇到了这样的问题:在一个视图中,我有一个按钮上传,上传图像并将其存储到某个文件夹。有没有办法调用动作上传,但不能返回视图?只是为了保存那些内容,然后我有另一个按钮,它会将我重定向到一个新视图。我尝试使用返回类型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);
        }

    }

4 个答案:

答案 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);

表示已收到上传,并将继续进一步处理。