web-dev-qa-db-ja.com

asp.net mvcビューで文字列をhtmlとして表示

HTMLマークアップを含む文字列を生成するコントローラーがあります。これをビューに表示すると、すべてのタグを含む単純な文字列として表示されます。 Htmlヘルパーを使用してエンコード/デコードして適切に表示しようとしましたが、機能しません。

string str= "<a href="/Home/Profile/seeker">seeker</a> has applied to <a href="/Jobs/Details/9">Job</a> floated by you.</br>";

私の見解では、

@Html.Encode(str)
80
Mukesh Sharma

@Html.Raw(str)を使用したい

@Html.Encodeは文字列を取り、すべての特殊文字が適切に処理されるようにします。これらにはスペースなどの文字が含まれます。

144
Jared

代わりにIHtmlStringを使用する必要があります。

IHtmlString str = new HtmlString("<a href="/Home/Profile/seeker">seeker</a> has applied to <a href="/Jobs/Details/9">Job</a> floated by you.</br>");

HTMLを保持する必要があるモデルプロパティまたは変数がある場合は常に、これが一般的に優れたプラクティスであると感じています。まず第一に、それは少しきれいです。例えば:

@Html.Raw(str)

に比べ:

@str

また、データがHTMLかどうかの懸念がコントローラーに保持されるため、@Html.Raw()を使用するよりも少し安全だと思います。フロントエンド開発者とバックエンド開発者がいる環境では、バックエンド開発者はどのデータがHTML値を保持できるかをよりよく調整できるため、この懸念をバックエンド(コントローラー)で保持できます。

私は通常、可能な限りHtml.Raw()の使用を避けようとします。

注目に値するもう1つのことは、strをどこで割り当てているかわかりませんが、これをどのように実装するかについて私に関係するいくつかのことです。

まず、ソリューション(IHtmlStringまたはHtml.Raw)に関係なく、コントローラーでこれを行う必要があります。ビューにはこのようなロジックは避ける必要があります。実際にはそこに属しているわけではありません。

さらに、ビューに値を取得するためにViewModelを使用する必要があります(また、プロパティタイプとしてIHtmlStringを使用するのが理想的です)。 @Html.Encode(str)のようなものを見るのは、例を単純化するためだけにこれを行っていない限り、少し心配です。

33
Jerad Rose

@Html.Raw(str)を使用できます

詳細については、 MSDN を参照してください

HTMLエンコードされていないマークアップを返します。

このメソッドは、エンコードされていないHTMLをレンダリングするIHtmlStringクラスを使用してHTMLマークアップをラップします。

6
AthibaN

MVCのHTML入力フィールドにも同様の問題がありました。 Webページには、フィールドの最初のキーワードのみが表示されていました。例:入力フィールド: "The quick brown fox"表示される値: "The"

解決策は、次のように値ステートメントで変数を引用符で囲むことでした。

<input class="ParmInput" type="text" id="respondingRangerUnit" name="respondingRangerUnit"
       onchange="validateInteger(this.value)" value="@ViewBag.respondingRangerUnit">
1
Roland Wales

類似の問題が最近あり、googleがここに着陸したので、完全を期すために他の人もここに着いた場合に備えてこの答えをここに入れました。

不適切な形式のhtmlがあったときに、実際にはすべてのhtmlタグが削除されましたで、タグ以外のコンテンツが残っている 。特に、開始テーブルタグが欠落しているテーブルがあり、文字列全体からすべてのhtmlタグが完全に削除されました。

したがって、上記が機能せず、まだ頭を悩ましている場合は、htmlをチェックが有効であることも確認してください。

動作させた後でも、MVCはtbodyタグを追加していましたが、何もありませんでした。これは、クリーンアップが発生していること(MVC 5)を示しており、発生しない場合は、すべて/一部のタグを削除します。

0
Greg