0
これはかなり簡単ですが、そうではありません。 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>
ありがとう、このアプローチは働いた。しかし、どうしてこんなに面倒なことは、条件付き文の構文が(初めの)ヘルパー関数で制限的なのか?私。 * if(!userHasAccess)listItemClass = "disabled"; *すべてが機能しますが、大括弧とelse文を追加するとクラッシュします。 – Pedery