我知道他们现在在ASP.NET MVC 2.0 <%: Model.CustomerName %>
因此,当您制作HTML帮助程序时,现在最好以这种方式使用(假设您不想进行HTML编码)?
答案 0 :(得分:2)
每当您显示用户输入/提交的数据以使您的网页更安全时,都应使用<%: %>
。
但有时HTML编码所有内容都不可行。如果你想保留一些HTML格式怎么办?在这种情况下,您将不得不使用常规<%= %>
语句。让我们想一个这种情况的例子。
假设您有一些网络内容,用户可以在其中提交评论。您希望提供保留某些格式(至少换行符)的功能。在这种情况下,您将在以后显示这些注释时保留<br/>
个元素。你有两个选择:
<br/>
替换所有新行(\ n) 。如果您想显示此评论,可以拨打<%= Comment %>
<%= Html.Encode(Comment).Replace("\n", "<br/>") %>
哪一个更好/更安全取决于每个特定情况,但清理HTML标签始终是包含在两者中的任何一个中的一个很好的步骤。一切还取决于允许的格式定义。如果将它们作为常规标签输入或类似于降价或类似的东西取决于您,最终的代码肯定取决于它。
答案 1 :(得分:1)
是的,从现在开始,您总是希望使用<%: Model.CustomerName %>
。只有在非常特殊的情况下,您才应该使用<%= %>
但是根本不要使用它。
如果您要创建自己不希望被编码的html帮助器,那么只需从它们返回MvcHtmlString
。
E.g。这是我创建的扩展方法,如果传入的值为true,则显示勾号图标。
public static MvcHtmlString MECross(this HtmlHelper html, string value, string text)
{
if (Convert.ToBoolean(value))
{
string spanTag = string.Format("<span class=\"replace icon-cross\" title=\"{0}\"><em></em>{1}</span>",
html.AttributeEncode(text),
html.Encode(text));
return MvcHtmlString.Create(spanTag);
}
return MvcHtmlString.Empty;
}
请注意,我Encode
和AttributeEncode
在我的扩展方法中可能存在危险的任何内容,然后返回MvcHtmlString
。
HTHS,
Chares