【问题标题】:ASP.NET MVC5: RedirectToActionASP.NET MVC5:RedirectToAction
【发布时间】:2015-10-05 04:04:19
【问题描述】:

我希望如果用户无权访问特定页面,则将重定向到该页面“ErrorAccessPage.cshtml”。此页面没有任何控制器。它位于文件夹名称Shared中。

逻辑如下:

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

【问题讨论】:

  • return View("yourViewName");
  • return RedirectToAction("~/Shared/ErrorAccessPage");

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


【解决方案1】:

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

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

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

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

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

在views文件夹中移动视图:

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

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

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

到你的 web.config

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

【讨论】:

  • 不,你的回答就够了。我真的很想对您的答案投赞成票,但我没有足够的声誉来做到这一点。所以,现在就欢呼吧。 -干杯!!!
【解决方案2】:

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

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

如果您只想显示一个视图,您可以使用View("view_name")。因为它会在您的解决方案中搜索 View->Your_Current_Controller_NameView->Shared 目录下的 html、aspx 或 cshtml 文件并显示出来。

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

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

希望这会对你有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-24
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    相关资源
    最近更新 更多