任务很简单。我在 web.config 中具有值(value),如下所示:
<add key="MenuTypes" value="1,2,3"/>
在 Razor 文件中,我需要根据这些值渲染一些菜单。因此,如果我在配置文件 (MenuTypes) 中的值为 3,我想渲染该项目。如果我没有它,我不想渲染它:
<div>
<ul id="setThemUp" class="vehicles">
<li><a class="bikes" href="#1">Bikes</a></li>
<li><a class="cars" href="#2">Cars</a></li>
@if (ViewBag.MenuTypes(((int)3).ToString()) > -1)
{
<li><a class="Trucks" href="#3">Trucks</a></li>
}
</ul>
我也尝试过:
<div>
<ul id="setThemUp" class="vehicles">
<li><a class="bikes" href="#1">Bikes</a></li>
<li><a class="cars" href="#2">Cars</a></li>
@if (ViewBag.MenuTypes.Contains("3"))
{
<li><a class="Trucks" href="#3">Trucks</a></li>
}
</ul>
</div>
但在这两种情况下我都得到: 用户代码未处理 RunTimeBinderException 无法对空引用执行运行时绑定(bind)。
我让它像这样工作:
<add key="TrucksEnabled" value="true"/>
<div>
<ul id="setThemUp" class="tabs">
<li><a class="bikes" href="#1">Bikes</a></li>
<li><a class="cars" href="#2">Cars</a></li>
@if ((bool)ViewBag.TrucksEnabled)
{
<li><a class="Trucks" href="#3">Trucks</a></li>
}
</ul>
</div>
但是我不能这样使用它。我需要它像第一个示例一样工作。我不太擅长 Razor/MVC。如有任何帮助,我们将不胜感激。
最佳答案
Controller
var menuTypes = WebConfigurationManager.AppSettings["MenuTypes"].ToString())
string[] tokens = menuTypes.Split(','); //Convert the strings into an array
ViewBag.MenuTypes = tokens;
View - MenuTypes
现在是一个列表,因此您现在可以使用 Contains()
:
@if (ViewBag.MenuTypes.Contains("3"))
{
<li><a class="Trucks" href="#3">Trucks</a></li>
}
关于c# - 通过 ViewBag 评估 web.config 文件的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18130641/