0

@Html.Actionlink() ヘルパーは<a>.cshtml ファイルで要素を作成するのに非常に便利ですが、C# 文字列内で要素を構築して、後で HTML 出力で正しくレンダリングすることはできますか?

たとえば、文字列変数に次のような値を割り当てるとします。

Book.ReadMore = "Click @Html.ActionLink(\"this link\", \"About\", \"Home\") to read more.";

次に、次のようなコードを使用して、.cshtml ページを介して (リテラル テキストとリンク) を表示しようとします。

<p>@Model.ReadMore</p>

ブラウザーに表示されるのは、@Html などを含む、入力したとおりの文字列全体だけです。

Click @Html.ActionLink("this link", "About", "Home") to read more.

さて、適切な SoC では、HTML を C# コードに含めることはベスト プラクティスではないことはわかっていますが<a>、このシナリオで、文字列自体ではなく、適切なリンクを取得することはまったく可能ですか?

編集: 詳細情報- この文字列は、約 20 ~ 30 個の文字列のコレクション内の 1 つの項目にすぎません ( for loopView で a を使用して表示されます)。これらのアイテムのほんの一握りだけがリンクを必要とします (これはケースごとに異なります)。上記のように、モデル コードで Razor/HTML を使用するのは明らかに良い方法ではないことに同意するので、(可能であれば) 右側のどこかにリンクを構築する柔軟性を与える単純なアプローチを取得しようとしています。 MVC SoC の保守性を維持しながら、

これを行うには、シンプルでありながら保守可能な「正しい」方法が必要です。

4

2 に答える 2

1

モデルに HTML を含めないでください。これはビューの問題であり、ビュー コードに属します。おそらく、Razor ヘルパーを使用する必要があります。

App_Code フォルダー (ない場合は作成します) に、ファイル ReadMoreHelpers.cshtml を追加します。

@helper ReadMore() {
    <text>Click @Html.ActionLink("this link", "About", "Home") to read more.</text>
}

次に、任意のビューで:

@ReadMoreHelpers.ReadMore()

そして、それはあなたが望むものを出力します。そのプロパティを自分のビューに入れることを主張する場合は、次のことができます。

Book.ReadMore = "Click " + @Html.ActionLink("this link", "About", "Home").ToHtmlString() + " to read more.";

次に、ビューで次を使用していることを確認しますRaw

@Html.Raw(Book.ReadMore) 

ただし、モデル プロパティに HTML を配置しないことをこれ以上強くお勧めすることはできません。

于 2013-11-01T02:11:27.800 に答える
0

私はそうは思わない。Razor ビュー エンジンは、実行時に ActionLink コードを解釈しますが、C# 文字列の一部として詰め込むと、コンパイル時に解釈されます。

于 2013-11-01T02:06:26.603 に答える