Подтвердить что ты не робот

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

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

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

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

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

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

4b9b3361

Ответ 1

Традиционным механизмом перенаправления в 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);
}

Ответ 2

В 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);
}

Ответ 3

В MVC никогда не используйте Response.Redirect используйте

return RedirectToAction("ActionResultName", "ControllerName");

Что касается ПОЧЕМУ НЕ использовать Response.Redirect в MVC:

  1. Проблемы с производительностью
  2. Не соответствует стандартному шаблону MVC asp.net и соглашениям, разработанным специально для MVC.

Ответ 4

его рекомендуется и его единственный способ перенаправить к форме asp.net в действии контроллера mvc, используя

return Redirect("/page/pagename.aspx");

иначе мы можем перенаправить с помощью (не рекомендуется и плохо)

Response.Redirect("/page/pagename.aspx", true);

он будет работать для перенаправления, но проблема в том, что он очистит все наши значения Session. поэтому почему это не рекомендуется.

Ответ 5

попробуйте этот код в mvc view page lode

        if (Session["UserName"] == null)
        {
            this.Response.Redirect("LogOn");

        }