数据从控制器传递,是否编码?

时间:2013-09-09 04:08:59

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我想问一下MVC3 +;从控制器以模型或视图包的形式传递的数据是默认编码的数据,或者我必须?

2 个答案:

答案 0 :(得分:1)

MVC主动尝试对值进行编码以防止跨站点脚本。

 @* This is HTML Encoded *@
 @Model.Value 

 @* This value is not encoded *@
 @Html.Raw(Model.Value)  

 @* The URL gets URL Encoded *@
 <a href="@Url" />

此Razor代码

 @ {
  bool disabled = false;
  bool readonly = true; 
  string className = null;
 }
 <input type="text" disabled="@disabled" readonly="@readonly" class="@className" />

实际产生此输出

 <input type="text" readonly="readonly" />

null false 会导致Razor视图引擎根本不呈现该属性。

如果您确实想要这样的 data-soldout =“false”,那么您需要这样做:

 data-soldout="@Html.Raw(isSoldout)" or data-soldout="@isSoldout.ToString()"

答案 1 :(得分:1)

你的意思是HTML编码?他们不是,不。

这意味着如果你有一个包含值"<b>some text</b>"的字符串属性,那么属性内容正是如此。

但是,如果您尝试使用@MyProperty将此输出打印到视图,则默认情况下,字符串由MVC进行HTML编码。因此输出将变为&lt;some text&gt;

您可以使用@Html.Raw(MyProperty)转义此内容。

请记住,“编码”一词有点含糊不清。尝试具体说明您所指的编码。