2017-06-21 9 views
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> 

答えて

2

あなたはこれを単純化し、条件属性

bool userHasAccess = ... 
<li [email protected](userHasAccess ? null : "disabled") style="@(listItemWidth)"> 
    @if (userHasAccess) 
    { 
     @Html.ActionLink(linkText, action, controller) 
    } 
    else 
    { 
     <span title="@i18n.NoAccess">@linkText</span> 
    } 
</li> 
を使用して <text>要素の使用を避けることができます
+0

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

関連する問題