【发布时间】:2021-02-22 20:57:55
【问题描述】:
我正在 _Layout.cshtml 文件中呈现一个菜单。仅当用户处于管理员角色时才应呈现菜单的一部分。我们在数据库中使用自定义角色。 Admin 字段以单个字符“Y”或“N”返回。这最初是一个遗留应用程序,正在迁移到 MVC 5。未使用 LINQ 或实体框架。
我将菜单创建为部分视图,Menu.cshtml:
<ul class="nav" ui-nav>
...
@if ((bool)ViewData["Admin"] == true)
{
<li>
<a href="#"><span>Users and Roles</span></a>
</li>
}
</ul>
我的 _Layout.cshtml 文件:
...
<aside id="aside" class="ui-aside">
@Html.Action("Menu")
</aside>
...
控制器的操作方法是我遇到问题的地方。我的意图是返回一个布尔值,并根据部分视图中的该值简单地切换菜单受保护部分的呈现。现在它在应该显示菜单的浏览器中呈现 True 或 False,因为该布尔值作为 HTML 字符串从 action 方法返回。
我知道我可以将菜单的那部分作为字符串从操作方法返回,但我想避免这种情况,因为菜单的其他部分会根据角色值呈现。我不想以一连串的片面观点告终。如果可能的话,我还想避免使用标签助手。我只是想根据 action 方法中的布尔值来切换部分视图中 HTML 菜单部分的呈现。
动作方法:
[ChildActionOnly]
public bool Menu()
{
using (connection...)
{
...
object adminObject = command.ExecuteScalar();
if (adminObject != null)
{
string admin = adminObject.ToString();
if (admin == "Y")
ViewData["Admin"] = true;
else
ViewData["Admin"] = false;
}
}
return (bool)ViewData["Admin"];
}
【问题讨论】:
标签: c# asp.net asp.net-mvc model-view-controller asp.net-mvc-5