gpt4 book ai didi

c# - 如何根据角色加载不同的 _layout.cshtml?

转载 作者:行者123 更新时间:2023-11-30 15:25:46 25 4
gpt4 key购买 nike

我的应用程序将有不同的角色,其中一个角色是全局管理员,它有添加用户、添加公司等选项。

我购买的模板有一个 _layout.cshtml,但我需要根据用户的角色加载不同的模板。

菜单非常不同。

我的观点开始

@{
Layout = "~/Views/Shared/_Layout.cshtml";
}

和我的 layouts.cshtml

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge">

<title>INSPINIA | @ViewBag.Title</title>

<link href='https://fonts.googleapis.com/css?family=Open+Sans:400,300,600,700' rel='stylesheet' type='text/css'>
<!-- Add local styles, mostly for plugins css file -->
@if (IsSectionDefined("Styles"))
{@RenderSection("Styles", required: false)}

<!-- Add jQuery Style direct - used for jQGrid plugin -->
<link href="@Url.Content("~/Scripts/plugins/jquery-ui/jquery-ui.css")" rel="stylesheet" type="text/css" />

<!-- Primary Inspinia style -->
@Styles.Render("~/font-awesome/css")
@Styles.Render("~/Content/css")
</head>
<body>

<!-- Skin configuration box -->
@Html.Partial("_SkinConfig")

<!-- Wrapper-->
<!-- PageClass give you ability to specify custom style for specific view based on action -->
<div id="wrapper" class="@Html.PageClass()">

<!-- Navigation -->
@Html.Partial("_Navigation")

<!-- Page wraper -->
<div id="page-wrapper" class="gray-bg @ViewBag.SpecialClass">

<!-- Top Navbar -->
@Html.Partial("_TopNavbar")

<!-- Main view -->
@RenderBody()

<!-- Footer -->
@Html.Partial("_Footer")

</div>
<!-- End page wrapper-->

<!-- Right Sidebar -->
@Html.Partial("_RightSidebar")

</div>
<!-- End wrapper-->

<!-- Section for main scripts render -->
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/bootstrap")
@Scripts.Render("~/plugins/slimScroll")
@Scripts.Render("~/bundles/inspinia")

<!-- Skin config script - only for demo purpose-->
@Scripts.Render("~/bundles/skinConfig")

<!-- Handler for local scripts -->
@RenderSection("scripts", required: false)
</body>
</html>

一切都很完美,但我需要创建另一个 layouts.cshtml 并引用不同的导航局部 View ,这就是问题所在,

当用户属于特定角色时,如何让应用程序加载特定的 layouts.csthml?

最佳答案

此答案假定您在 MVC4 中使用 SimpleMembership 的默认角色管理器:

如果它只是布局的特定部分,您可以使用 Razor。将其放在您的菜单代码所在的位置...(可能在 _Navigation 中):

@if (Roles.IsUserInRole("GlobalAdmin"))
{
@Html.ActionLink("Admin only link", "ActionName", "ControllerName")
@Html.ActionLink("Another admin link", "ActionName", "ControllerName")
}

如果是来自特定的action方法,可以指定布局:

string layoutName = Roles.IsUserInRole("GlobalAdmin") ? "_LayoutAdmin" : "_Layout";
return View(model, layoutName);

您可以通过使用自定义 actionresult 甚至 action filter 来自动执行最后一种方法。

关于c# - 如何根据角色加载不同的 _layout.cshtml?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30538346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com