web-dev-qa-db-ja.com

使い方 ? :Razorおよびインラインコードブロックを含むifステートメント

古い.aspxビューを新しいRazoreビューエンジンで更新しています。次のようなコードがある場所がたくさんあります。

<span class="vote-up<%= puzzle.UserVote == VoteType.Up ? "-selected" : "" %>">Vote Up</span>

理想的にはこれをやりたい:

<span class="vote-up@{puzzle.UserVote == VoteType.Up ? "-selected" : ""}">Vote Up</span>

ただし、ここには2つの問題があります。

  1. vote-up@{puzzle.UserVote ....は@記号をコードブロックの開始として処理していません
  2. @puzzle.UserVote == VoteType.Upは、変数の値をレンダリングすることになっているかのように、最初の部分@puzzle.UserVoteを調べます。

誰もがこれらの問題に対処する方法を知っていますか?

144
Micah

これは動作するはずです:

<span class="vote-up@(puzzle.UserVote == VoteType.Up ? "-selected" : "")">Vote Up</span>
281
CD..

キーは、@区切り文字の後の括弧で式をカプセル化することです。このようにして、任意の複合式を機能させることができます。

31
JPC
@( condition ? "true" : "false" )
21
Daniel Santos

ほとんどの場合、 ソリューション of CD .. は完全に正常に動作します。しかし、私はもう少しねじれた状況がありました:

 @(String.IsNullOrEmpty(Model.MaidenName) ? "&nbsp;" : Model.MaidenName)

これにより、「nbsp;」と表示されます。私のページで、それぞれソース&amp;nbsp;を生成します。これで、ソースコードを記述できるHtml.Raw("&nbsp;")関数がありますが、このコンスタレーションではコンパイラエラーがスローされます。

コンパイラエラーメッセージ:CS0173: 'System.Web.IHtmlString'と 'string'の間に暗黙的な変換がないため、条件式の種類を特定できません

だから私は次のようなステートメントを書くことになりました。これはニースではありませんが、私の場合でも動作します:

@if (String.IsNullOrEmpty(Model.MaidenName)) { @Html.Raw("&nbsp;") } else { @Model.MaidenName } 

注:おもしろいのは、中括弧内に入ったら、Razorブロックを再起動する必要があるということです。

3
Damian Vogel