Автоматически перемещать пользователя через определенный промежуток времени в представлении - PullRequest
7 голосов
/ 10 июня 2011

У меня есть простое приложение MVC 3. Я хочу, чтобы сайт автоматически перенаправлял пользователей в другое место после того, как они вышли из системы и несколько секунд находились на странице выхода. Мне бы хотелось, чтобы это было реализовано в View, но я не могу понять, как превратить соглашения MVC во что-то, чтобы это сделать. Я знаю, что могу использовать это:

<META HTTP-EQUIV="Refresh" CONTENT="5;URL=/Index">

Но это означает, что я должен указать URL, [или, если его просто / Index, он добавит его к текущему URL, что означает, что он вызовет действие контроллера (информация в скобках неверна)]. Единственная проблема в том, что это мой аккаунт, и я не хочу перенаправлять их (пользователей) на одно из его действий. Я хочу, чтобы они были перенаправлены на Action в моем контроллере Home, предпочтительно Index Action. Я полагаю, что это можно сделать с новым действием в моем контроллере учетной записи, я связываюсь там и все, что делает действие, перенаправляет в новый вид. Но это кажется пустой тратой кода. Могу ли я указать непосредственно контроллер и действие, которое я хочу сделать для этого?

РЕДАКТИРОВАТЬ: Решил сам. То, что я сказал об этом, добавление / индексирование к текущему URL было неверным, я могу указать там действие контроллера, используемое:

<META HTTP-EQUIV="Refresh" CONTENT="5;URL=/Home/Index">

До сих пор работало, и мне не нужно было добавлять информацию о локальном хосте. Это дает мне ссылку localhost:xxxxx/Home/Index Что смущает меня, если вы используете это:

<META HTTP-EQUIV="Refresh" CONTENT="5;URL=~/Home/Index">

Ссылка становится localhost:xxxxx/Account/~/Home/Index, что действительно странно, поскольку она добавляет ~ к ссылке URL, что обычно означает просто скопировать содержимое заранее и добавить к нему. Тем не менее, похоже, что наличие ~ все еще означает, что нужно скопировать содержимое заранее и добавить все после, мы просто добавим ~ и на этот раз ... Часть учетной записи по ссылке существует, так как представление вызывалось из контроллер учетной записи и находится в папке просмотра контроллера учетной записи.

Ответы [ 2 ]

19 голосов
/ 10 июня 2011

Вы можете использовать помощник Url.Action, который позаботится о создании правильного URL-адреса на основе ваших настроек маршрутов.

Пример с бритвой:

<META HTTP-EQUIV="Refresh" CONTENT="5;URL=@(Url.Action("Index", "Home"))">

и с веб-формами:

<META HTTP-EQUIV="Refresh" CONTENT="5;URL=<%= Url.Action("Index", "Home") %>">

В качестве альтернативы вы можете использовать javascript для выполнения перенаправления вместо тега meta:

<script type="text/javascript">
    window.setTimeout(function() {
        window.location.href = '@Url.Action("Index", "Home")';
    }, 5000);
</script>
0 голосов
/ 21 января 2018

Вы можете использовать, как показано ниже:



    using System.Web.UI;<br/>
    public ActionResult Index(){
     Redirector("Edit", "Home");
     return View();
    }
    private void Redirector(string actionName,string controllerName="") {
    string js = "window.setTimeout(function() {$('#preloader').show();window.location.href = '@Url.Action("+actionName+", "+controllerName+")';}, 5000);";
    Control ctrl = new Control();
    ScriptManager.RegisterClientScriptBlock(ctrl, this.GetType(), "redirect", js, true);
    }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...