0

MVC4 サンプル プロジェクトのカミソリ ビューに次のサンプル コードがあります。

<p>@((@Model == null) ? "<unknow man>" : @Model.ClientName)</p>
<p>
    @if (@Model == null)
    {
        @Html.Encode("<unknow man>")
    }
    else
    {  
        @Model.ClientName;
    }
</p>

出力は私にとって少し奇妙です...

Internet Explorer では次のように表示されます。

<p>&lt;unknow man&gt;</p>
<p>&amp;lt;unknow man&amp;gt;</p>

Chromeの場合:

<p>​&lt;unknow man>​&lt;/p>
​&lt;p>​&amp;lt;unknow man&gt;</p>​

そして、(私にとって) 最も驚くべきことは、最終的に同じ視覚的出力が得られたことです。

<unknow man>

&lt;unknow man&gt; 

ただし、これを HTML で表示したかったのです。

<p>&lt;unknow man&gt;</p>
<p>&lt;unknow man&gt;</p>

そしてこれをユーザーに:

<unknow man>

<unknow man>

PS

最後に、このように文字列を適切に表示する解決策を見つけました

    @if (@Model == null)
    {
        @("<unknow man>")
    }

しかし、ブラウザーの HTML.Encode の違いを誰が説明できますか? また、なぜこれが最初の例のコードのように機能しなかったのでしょうか?

4

1 に答える 1

1
<p>@((@Model == null) ? @Html.Raw("&lt;unknow man&gt;") : @Model.ClientName)</p>
<p>
    @if (@Model == null)
    {
        <text>&lt;unknow man&gt;</text>
    }
    else
    {  
        @Model.ClientName;
    }
</p>
于 2013-10-07T09:22:10.633 に答える