2015-12-09 3 views
1

У меня такая проблема: у меня есть одна кнопка загрузки, которая загружает изображение и сохраняет его в какой-то папке. Есть ли способ вызвать загрузку действий, но не вернуть представление? Просто чтобы сохранить этот контент, а затем у меня появится еще одна кнопка, которая перенаправит меня на новое представление. Я попробовал с возвратом типа void, но он отправляет меня на пустую страницу.Выполнение действия в контроллере 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

Ваш метод формы - 'Post', что означает, что он делает запрос на страницу, вам нужно вернуть * что-то *. То, что я делал в прошлом (с помощью методов async), - это вернуть «ActionResult» и, по крайней мере, вернуть новый «HttpStatusCodeResult (HttpStatusCode.OK)», но обычно перенаправляет их на один и тот же вид с некоторой информацией о загрузке (или неудача). –

ответ

0

Вы можете использовать метод Content() для возврата ContentResultContentResult по умолчанию возвращает текст/равнина, как его 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"); 
} 
0

Вы можете вернуть EmptyResult.

MVC хочет, чтобы вы использовали EmptyResult, когда действие было конкретно , целью которого не было ничего. В отличие от всех предыдущих ActionResults , хотя у EmptyResult нет помощника. Кроме того, если действие возвращает null, MVC обнаружит это и заставит его вернуть EmptyResult.

0

Хорошо, я искал об этом, и я думаю, что мне нужен ajax без обновляющей страницы. Я нашел это File upload using MVC 4 with Ajax. Я попробую посмотреть, работает ли это.

0

правильные решения использовать либо:

return new HttpStatusCodeResult(HttpStatusCode.OK); 

, чтобы указать, что загрузка была получена, и вся обработка завершена.


return new HttpStatusCodeResult(HttpStatusCode.Accepted); 

, чтобы указать, что загрузка была получена, и дальнейшая обработка будет продолжаться.

Смежные вопросы