ASP.NET MVC4、Twitter.Bootstap 3.0.0、Razorでプロジェクトを開発しています。ビューで、プロパティ値に応じてボタンを表示する必要があります。 switch
ステートメントを使用すると、以下の例は機能しません(何も表示されません)。
@switch (Model.CurrentStage) {
case Enums.Stage.ReadyToStart:
Html.ActionLink(Language.Start, "Start", new { id=Model.ProcessId }, new { @class = "btn btn-success" });
break;
case Enums.Stage.Flour:
Html.ActionLink(Language.GoToFlour, "Details", "Flours", new { id=Model.Flour.FlourId }, new { @class = "btn btn-success" });
break;
...
}
<span>
タグを使用して少し変更すると、コードは機能します。
@switch (Model.CurrentStage) {
case Enums.Stage.ReadyToStart:
<span>@Html.ActionLink(Language.Start, "Start", new { id=Model.ProcessId }, new { @class = "btn btn-success" })</span>
break;
case Enums.Stage.Flour:
<span>@Html.ActionLink(Language.GoToFlour, "Details", "Flours", new { id=Model.Flour.FlourId }, new { @class = "btn btn-success" })</span>
break;
...
}
誰かが理由を説明できますか?
ありがとう。
Razorのファンキーさです。通常のHTMLでC#コードを使用している場合、_@
_記号を何かに付けると、結果がページに書き込まれます。
_<p>@Html.ActionLink("whatever", "whatever"...)</p>
_
これは、昔ながらの_<%= %>
_に似ています。
_<p><%= SomeMethodThatReturnsSomethingThatWillBeWritten() %></p>
_
ただし、Html.ActionLinkメソッドは.NETの世界ではMvcHtmlString
オブジェクトを返すだけです。最初の例では、通常のC#コードブロックがあります。したがって、そこからHtml.ActionLink()
を呼び出すと、それが実行され、MvcHtmlString
が誰にも返されません。 2番目の例では、HTMLコンテキストに戻り、HTMLを再度書き込みます。
_<text>
_または他の実際のHTMLを使用する代わりに、特別な_<span>
_ブロックを使用してHTMLに戻ることができ、追加のHTMLを書き込まずに直接書き込みます。
_case Enums.Stage.ReadyToStart:
<text>@Html.ActionLink(Language.Start, "Start", new { id=Model.ProcessId }, new { @class = "btn btn-success" })</text>
break;
_
同様の_@:
_構文を使用することもできます。
_case Enums.Stage.ReadyToStart:
@:@Html.ActionLink(Language.Start, "Start", new { id=Model.ProcessId }, new { @class = "btn btn-success" })
break;
_
あなたは両方についてもっと読むことができます ここ
[〜#〜]編集[〜#〜]
実際、この場合、どちらも必要ありません。 HTMLに戻すには、_@
_記号が必要です。
_case Enums.Stage.ReadyToStart:
@Html.ActionLink(Language.Start, "Start", new { id=Model.ProcessId }, new { @class = "btn btn-success" })
break;
_