这应该是相当微不足道的,但事实并非如此。我正在尝试使用Razor助手输出一堆链接,但语法似乎变得非常丑陋。具有良好Razor知识的人能否帮助我澄清如何删除<text>
标签并可能平衡标签以便我可以摆脱Raw()输出?
@helper LinkBuilder(string linkText, string action, string controller, List<string> controllersGroup = null) {
bool userHasAccess = securityEngine.HasAccess(userRoles, controller.ToLower(), Permission.View);
<text></text> @* Razor demands some output first *@
if (userHasAccess == false) {
<text><li class="disabled" style="@(listItemWidth)"></text>
}
else {
<text><li style="@(listItemWidth)"></text>
}
if (userHasAccess) {
@Html.ActionLink(linkText, action, controller)
}
else {
<span title="@i18n.NoAccess">@linkText</span>
}
@Html.Raw("</li>") @* Without Html.Raw, Razor complains about unmatching tags *@
}
我们的想法是使用以下代码构建菜单:
<ul>
@LinkBuilder(i18n.Documents, "Documents", "Product")
@LinkBuilder(i18n.Reports, "Index", "Report")
@LinkBuilder(i18n.Committees, "Index", "Committee", new List<string> { "Company", "Person" })
</ul>
答案 0 :(得分:2)
您可以简化此操作,并避免使用条件属性
来使用<text>
元素
bool userHasAccess = ...
<li class=@(userHasAccess ? null : "disabled") style="@(listItemWidth)">
@if (userHasAccess)
{
@Html.ActionLink(linkText, action, controller)
}
else
{
<span title="@i18n.NoAccess">@linkText</span>
}
</li>