我有一个简单的MVC 3应用程序。我希望站点在用户注销并在注销页面上停留几秒后自动将用户重定向到其他位置。我希望将其实现到View中,但我无法弄清楚如何将MVC约定用于执行此操作。我知道我可以用这个:
<META HTTP-EQUIV="Refresh" CONTENT="5;URL=/Index">
但这意味着我必须指定一个URL,[或者如果它只是/ Index它会将它附加到当前URL,这意味着它将调用Controller的Action(括号中的信息不正确)]。唯一的问题是这是我的帐户控制器,我不想将它们(用户)重定向到其中一个操作。我希望它们重定向到我的Home控制器中的Action,最好是Index Action。我想这可以通过我的帐户控制器中的新Action完成,我链接到那里,Action所做的一切都重定向到新的View。但这似乎浪费了代码。我可以直接指定我想要的控制器和操作吗?
编辑:我自己解决了。我所说的关于它的/当前URL的索引是错误的,我可以在那里指定Controller Action,使用:<META HTTP-EQUIV="Refresh" CONTENT="5;URL=/Home/Index">
到目前为止工作,我没有添加localhost信息。这给了我链接localhost:xxxxx/Home/Index
如果你使用它,让我困惑的是:
<META HTTP-EQUIV="Refresh" CONTENT="5;URL=~/Home/Index">
链接变为localhost:xxxxx/Account/~/Home/Index
这真的很奇怪,因为它将~
添加到URL链接,这通常只是意味着预先复制内容并附加到。然而,看起来~
的存在仍然意味着事先复制内容并追加所有内容,我们这次也只追加~
....链接的帐户部分就在那里View是从Account控制器调用的,位于Account Controller的View文件夹中。
答案 0 :(得分:18)
您可以使用Url.Action
帮助程序,它将根据您的路径设置生成正确的URL。
Razor示例:
<META HTTP-EQUIV="Refresh" CONTENT="5;URL=@(Url.Action("Index", "Home"))">
和WebForms:
<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>
答案 1 :(得分:0)
您可以使用如下:
using System.Web.UI;
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);
}