ASP.NET MVC5: RedirectToAction

4
我希望如果用户没有访问特定页面的权限,就会重定向到这个页面 "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");
} 

enter image description here


return View("yourViewName"); - user3559349
返回 RedirectToAction("~/Shared/ErrorAccessPage"); - Sarvesh Mishra
2个回答

5

如果没有控制器,就不能使用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文件中

出于安全性和一致性的考虑,建议采用前者。


不,你的回答已经足够了。我真的想给你点赞,但是我没有足够的声望来做到这一点。所以,现在就只能祝福你了。-干杯!!! - kwingkwingko

-1

您可以使用方法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");
}

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

希望这能帮到你。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接