2

以下に示すように、ViewData インスタンスに html マークアップを設定しようとしています。ページがレンダリングされると、html タグは HTML マークアップではなくテキストとしてレンダリングされます。理由を知っている人はいますか?

コントローラーコード:

if (user.ActivationStatus == false)
{
    ...
    ViewData["Message"] = "<p>Your account has been activated, you're good to go.</p>";
}
    else 
{
    ViewData["Message"] = "<p>Sorry, this account has already been activated.</p>";
}
return View(); 

コードを表示:

<h2>Confirmation</h2>
<p><%: ViewData["Message"] %></p>

次に、過去に asp.net Web フォームで MultiView 機能を使用しました。この機能は理想的であり、MVC で同様の機能を実装するのが好きです。

関数の結果 (上記の「if」ステートメントなど) に応じて、コントローラー コードからビューのプレースホルダーに異なる PartialViews を呼び出す方法はありますか?

4

3 に答える 3

4

<%: %>==Html.Encode(ViewData["Message"]);は HTML エンコーディング文字列です...

これを試して:

<%= ViewData["Message"]%>

また、異なるパーシャルをレンダリングできるViewData値に応じて、パーシャル コントロールを制御できる必要があります。ViewDataページ上での後の動作を表すモデルにビューを強く型付けすることもできます...

于 2010-08-15T14:00:09.897 に答える
4

MvcHtmlStringを作成できます

<%: MvcHtmlString.Create(ViewData["Message"]) %>

しかし、実際には、コントローラーに html を含めるべきではありません。ビューを強く型付けすることで、代わりに次のようなことができます。

<h2>Confirmation</h2>
<% if(Model.ActivationStatus) { %>
  <p>Sorry, this account has already been activated.</p>
<% } else { %>
  <p>Your account has been activated, you're good to go.</p>
<% } %>
于 2010-08-15T14:05:55.653 に答える
2

ビューの出力を次のように変更します。

<h2>Confirmation</h2>
<p><%= ViewData["Message"] %></p>

<%: %> 出力を自動的に HTML エンコードする場合にのみ、構文を使用してください。

于 2010-08-15T14:03:12.713 に答える