2010-08-19 2 views
4

Я занимаюсь разработкой в ​​ASP.NET MVC на короткое время. До этого момента действия контроллера были довольно простыми. Каждое действие возвращает соответствующее представление. Однако недавно я создал действие, для которого мне не обязательно нужна страница (цель действия - работать с базой данных).Нужен ли мне просмотр для каждого действия?

Мой вопрос - что здесь делать. В конце метода я возвращаю Response.Redirect ('\ Controller \ View'), поэтому я возвращаюсь к другому представлению. Можно ли не возвращать какой-либо вид в конце действия? Каковы лучшие практики здесь?

+0

I вид есть такой же вопрос. Но могу ли я еще раз спросить о вашем вопросе. Когда вы говорите, что работаете с базой данных, что конкретно вы имеете в виду? Запустить инструкцию insert или что-то еще? – XstreamINsanity

+0

Вы можете перенаправить или вернуть объект чего-то, что наследуется от ActionResult .. это все, что я думаю, что вы могли бы сделать ... но было бы интересно узнать лучшие практики здесь. – Vishal

+0

Пожалуйста, не помещайте теги в заголовок. Исправлена. – Robaticus

ответ

2

Если вам нужно перенаправить пользователя, потому что он нажал ссылку, перенаправит пользователя.

Если ваша публикация с помощью Ajax или другой техникой, и нет никакого значимого ответа, измените метод действия контроллера, чтобы получить тип возврата void.

+0

Спасибо, jfar! Я думал об этом, но, исследуя Google, я немного смутился о том, было ли это принято. Из ваших и других ответов кажется, что все в порядке. (И, да, это AJAX POST.) – JasCav

1

Если вы отправляете сообщения с помощью AJAX, и вам не нужно перенаправлять пользователя или отображать новое представление, вам может потребоваться вернуть строку, отображающую пользователю подтверждение.

+0

Спасибо. Да, я использую jQuery для отображения сообщения fadeIn/fadeOut, позволяющего пользователю узнать, что сохранение (AKA, POST) было успешным. – JasCav

0

Я бы сказал, что действие должно всегда обрабатывать HTTP-запрос. Если он возвращает представление или перенаправляет на другое действие, то оба варианта возможны.

Рассмотрим следующий пример:

[HttpGet] // Handles only GET requests 
public ActionResult Edit(int id) 
{ 
    // get entity from repository 
    // and create edit model 
    return View(editModel); 
} 

[HttpPost] 
public ActionResult Edit(EntityEditModel editModel) 
{ 
    // if ModelState is valid, save entity 
    // and if success redirect to index 
    return RedirectToAction("Index"); 
} 

Первое действие возвращает представление, то второй не (только если ModelState не действует, то он повторно отображает Редактировать вид). И это абсолютно правильно делать (это даже рекомендуется). Но оба действия обрабатывают HTTP-запрос.

0

Вы можете использовать тильды синтаксис, чтобы обеспечить полный путь к мнению, следующим образом:

Указание View

public ActionResult Index() 
{ 
ViewBag.Message = "Modify this template to jump-start 
your ASP.NET MVC application."; 
return View("~/Views/Example/Index.cshtml"); 
} 

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

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