gpt4 book ai didi

c# - _Layout.cshtml 上的 MVC 决策

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

所以我环顾四周,似乎找不到合适的解决方案来解决我的问题。

问题

在我的布局中,我希望能够根据数据库中的内容选择在运行时是否存在导航项:

当前布局(导航栏)

<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li>@Html.ActionLink("Dashboard", "Index", "Dashboard")</li>
<li>@Html.ActionLink("NzbGet", "Index", "NzbGet")</li>
<li>@Html.ActionLink("Plex", "Index", "Plex")</li>
<li>@Html.ActionLink("Settings", "Index", "Settings")</li>
</ul>
</div>

我如何能够决定显示哪一个:

public PrincipleExtension(ISettingsService<SabNzbSettingsDto> sab)
{
SabService = sab;
}

private ISettingsService<SabNzbSettingsDto> SabService { get; set; }
public bool IsApplicationEnabled(IPrincipal principal, Applications application)
{
switch (application)
{
case Applications.SabNZBD:
return SabService.GetSettings().Enabled;
//...
}
return false;
}

现在 PrincipleExtension 最初是 IPrincipal 上的扩展方法。但现在这是不可能的,因为我正在使用 IoC 容器并且不想对任何依赖项进行硬编码。

所以在它是静态方法之前我可以完成 User.IsApplicationEnabled(Applications.SabNZBD)

我现在如何检查应用程序在布局中是否已将启用标志设置为 true?有什么想法吗?

谢谢。

最佳答案

将您的菜单 HTML 移动到 PartialView 并让它作为 ActionResult 从 Controller Action 返回。

<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
@foreach (var item in Model)
{
<li><a href="@item.Url">@item.Name</a></li>
}
</ul>
</div>

让 Controller 确定要显示的菜单项并将新模型发送到 PartialView。

public ActionResult ProductsMenu()
{
var listOfAvailableProducts = GetAvialableProducts(Principal); //to implement elsewhere
var productsMenuItems = new List<ProductMenuItem>();

for(var i in listOfAvailableProducts)
{
productsMenuItems.Add(new ProductMenuItem
{
Id = i.id,
Name = i.name,
Url = "//example.com/there"
}
);
}

return PartialView("/path/to/_ProductsMenu.cshtml", productsMenuItems);
}

然后在 _Layout.cshtml Razor View 中这样调用它:

@{
Html.RenderAction("ActionName","ControllerName");

关于c# - _Layout.cshtml 上的 MVC 决策,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34071297/

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