ASP.NET MVC5:RedirectToAction

时间:2015-10-05 04:04:20

标签: c# asp.net-mvc-5

我希望如果用户无法访问特定页面,则会重定向到此页" ErrorAccessPage.cshtml" 。此页面没有任何控制器。它位于文件夹名称共享

这是逻辑:

if (user has access){
    return View();
}
else
{
    return RedirectToAction("//how to input the page here?");
}

更新

我将代码更改为:

if (moduleViewModel.CanRead == true){
    return View();
}
else
{
    return RedirectToAction("~/Shared/ErrorAccessPage.cshtml");
} 

enter image description here

2 个答案:

答案 0 :(得分:5)

没有控制器,你不能RedirectToAction,因为Action必须存在于控制器上。也就是说,您可以重定向到“普通”html文件:

Redirect("~/Shared/ErrorAccessPage.html");

或者您可以直接从当前控制器操作返回视图,而无需重定向:

return View("~/Shared/ErrorAccessPage.cshtml");

至于您更新的错误消息,由于您尝试访问Views文件夹之外的视图,因此MVC禁止提供该文件。您有两种选择:

移动视图文件夹中的视图:

return View("~/Views/Shared/ErrorAccessPage.cshtml");

通过添加以下内容,允许MVC从Views文件夹外部提供视图:

<add key="webpages:Enabled" value="true" />

到你的web.config

出于安全性和一致性原因,建议使用前者。

答案 1 :(得分:-1)

您可以使用方法View("ErrorAccessPage")来显示您的信息页。

RedirectToAction()将搜索控制器操作而不是视图。如果找到控制器操作,它会将执行控制传递给匹配的控制器操作。

如果您只想显示视图,可以使用View("view_name")。因为它会在解决方案中的 View-&gt; Your_Current_Controller_Name View-&gt; Shared 目录下搜索html,aspx或cshtml文件,然后只显示它。

if (user has access){
    return View();
}
else
{
    return View("ErrorAccessPage");
}

所以,你的最终代码将是,

希望这会对你有所帮助。