借助WebForms視圖引擎,我通常將三元運算符用于非常簡單的條件,尤其是在HTML屬性中。例如:<a class="<%=User.Identity.IsAuthenticated ? "auth" : "anon" %>">My link here</a>上面的代碼將為<a>標簽提供auth或的類,anon具體取決于用戶是否通過了身份驗證。Razor視圖引擎的等效語法是什么?因為Razor要求HTML標簽“知道”何時跳入和跳出代碼和標記,所以我目前堅持以下幾點:@if(User.Identity.IsAuthenticated) { <a class="auth">My link here</a> }else { <a class="anon">My link here</a> }坦率地說,這是可怕的。我很想做一些喜歡這一點,但我在努力了解如何在剃刀:<a class="@=User.Identity.IsAuthenticated ? "auth" : "anon";">My link here</a>-更新:在此期間,我創建了以下HtmlHelper:public static MvcHtmlString Conditional(this HtmlHelper html, Boolean condition, String ifTrue, String ifFalse){ return MvcHtmlString.Create(condition ? ifTrue : ifFalse);}在Razor中可以這樣稱呼它:<a class="@Html.Conditional(User.Identity.IsAuthenticated, "auth", "anon")">My link here</a>不過,我希望有一種使用三元運算符的方法,而不必退一步將其包裝在擴展方法中。
3 回答

蕭十郎
TA貢獻1815條經驗 獲得超13個贊
您應該能夠使用@()表達式語法:
<a class="@(User.Identity.IsAuthenticated ? "auth" : "anon")">My link here</a>
不過,我沒有安裝Razor,所以我可能是錯的。

暮色呼如
TA貢獻1853條經驗 獲得超9個贊
附錄:
重要的概念是您正在評估Razor代碼中的表達式。最好的方法(例如,如果您處于foreach循環中)是使用通用方法。
在Razor中調用通用方法的語法為:
@(expression)
在這種情況下,表達式為:
User.Identity.IsAuthenticated ? "auth" : "anon"
因此,解決方案是:
@(User.Identity.IsAuthenticated ? "auth" : "anon")
此代碼可以在Razor中的任何地方使用,而不僅僅是html屬性。
有關C#Razor語法快速參考,請參見@Kyralessa的評論(Phil Haack的博客)。
- 3 回答
- 0 關注
- 514 瀏覽
添加回答
舉報
0/150
提交
取消