2017-06-21 59 views
0

這應該是相當平凡的,但事實並非如此。我試圖用一個Razor助手來輸出一堆鏈接,但是這個語法似乎變得很醜陋。具有良好Razor知識的人能否幫助我澄清如何刪除<text>標籤並有可能平衡標籤,以便擺脫Raw()輸出?幫手中正確的Razor語法

@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

謝謝,這種方法奏效。但是爲什麼Razor在條件語句的句法(輔助函數的開始處)方面如此限制呢?即如果我添加* if(!userHasAccess)listItemClass =「disabled」; *一切正常,但如果我添加括號和一個else語句,它崩潰。 – Pedery