В ASP.NET MVC, как response.redirect работает?

Я использовал response.redirect в классическом ASP и веб-формах ASP.NET. Однако с MVC 2.0, я сталкиваюсь с чем-то специфическим.

У меня есть закрытый метод в классе контроллера, который используется несколькими методами контроллера, чтобы помочь загрузить и проверить некоторую информацию. Этот закрытый метод является установкой, чтобы перенаправить, если проблема обнаружена к универсальной странице сообщения об ошибке.

Большая проблема, которую я замечаю, состоит в том, что класс контроллера вызова и просмотр страницы пытаются завершить рендеринг и загрузку, прежде чем перенаправление на самом деле произойдет. Это является раздражающим в разработке, потому что Представление выдает исключения, который я должен проигнорировать, прежде чем моя универсальная ошибочная страница наконец загружается.

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

Любая справка или совет относительно перенаправлений в MVC значительно ценились бы.

29
задан Swoop 12 May 2010 в 20:35
поделиться

2 ответа

Обычным механизмом перенаправления в ASP.Net MVC является возврат клиенту объекта типа RedirectResult. Если это сделать до вызова вашего метода View, ваши методы просмотра никогда не будут вызываться.

Если вы вызываете Response.Redirect самостоятельно, вместо того, чтобы позволить фронт-контроллеру Asp.Net MVC делать это за вас, ваш метод контроллера будет продолжать работать до тех пор, пока он не завершит работу или не выдаст исключение.

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

например:

public ActionResult Edit(MyEntity entity)
{
  if (!IsValid()) return Redirect("/oops/");
  ...
  return View();

}

private bool IsValid()
{
  if (nozzle==NozzleState.Closed) return false;
  if (!hoseAttached) return false;
  return (userRole==Role.Gardener);
}
46
ответ дан 28 November 2019 в 01:01
поделиться

В ASP.NET MVC вы обычно перенаправляете на другую страницу, возвращая RedirectResult из метода контроллера.

Пример:

public ActionResult Details(int id)
{
     // Attempt to get record from database
     var details = dataContext.GetDetails(id);

     // Does requested record exist?
     if (details == null)
     {
         // Does not exist - display index so user can choose
         return RedirectToAction("Index");
     }

     // Display details as usual
     return View(details);
}
20
ответ дан 28 November 2019 в 01:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: