Какой идеальный метод для перенаправления на новый URL изнутри View? - PullRequest
0 голосов
/ 23 декабря 2009

Итак, в моем ASP.NET MVC View у меня есть условный оператор для перенаправления пользователей на другую страницу.

Каков наилучший способ сделать это?

Что такое Controller.RedirectToAction() эквивалент для вида?

Ответы [ 2 ]

4 голосов
/ 23 декабря 2009

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

Однако вот что я бы использовал, если бы по какой-либо причине у меня не было доступа к контроллеру:

<meta http-equiv="refresh" content='0;url=<%=Html.Action("MyAction","MyController") %>'>

Обновление

В своем комментарии вы упомянули, что это происходит из-за проверки ролей, и вы не хотите делать это в каждом контроллере / действии. Если это так, то вот что вы хотели бы рассмотреть:

Создайте базовый класс контроллеров и сделайте так, чтобы каждый контроллер расширялся от этого класса.

В вашем базовом контроллере есть метод OnActionExecuting . Здесь у вас есть что-то вроде этого:

public class MyBaseController : Controller
{
  protected override void OnActionExecuting(ActionExecutingContext filterContext)
  {
     base.OnActionExecuting(filterContext);
     if (/*the user is not in the role desired*/)
     {
       RedirectToRoute(filterContext, new { controller = "MyController", action = "MyAction"});
    }
  }

  private void RedirectToRoute(ActionExecutingContext context, object routeValues)
  {
    var rc = new RequestContext(context.HttpContext, context.RouteData);
    string url = RouteTable.Routes.GetVirtualPath(rc, new RouteValueDictionary(routeValues)).VirtualPath;
    context.HttpContext.Response.Redirect(url, true);
  }
}
0 голосов
/ 23 декабря 2009

Лучшим вариантом, вероятно, будет перемещение условного выражения в ваш контроллер и выполнение там перенаправления (это также упрощает проверку логики перенаправления). В качестве альтернативы, вы можете заключить оператор JavaScript в условие вашего View на стороне сервера следующим образом:

<% if (viewShouldRedirect) { %>
    <script type="text/javascript">
        window.location = "/Your/New/Url";
    </script>
<% } %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...