我知道他们现在在 ASP.NET MVC 2.0 中有这个 <%: Model.CustomerName %>
所以当你制作 HTML 助手时,现在使用这种方式更好吗(前提是你不想做 HTML 编码)?
我知道他们现在在 ASP.NET MVC 2.0 中有这个 <%: Model.CustomerName %>
所以当你制作 HTML 助手时,现在使用这种方式更好吗(前提是你不想做 HTML 编码)?
每当您显示用户输入/提交的数据时都应使用using<%: %>
以使您的网页更安全。
但有时对所有内容都进行 HTML 编码是不可行的。如果您确实想保留一些 HTML 格式怎么办?在这种情况下,您将不得不使用常规<%= %>
语句。让我们考虑一个例子。
假设您有一些 Web 内容,用户可以在其中提交评论。您想提供保留某些格式的能力(至少换行符)。在这种情况下,您必须<br/>
在稍后显示这些注释时保留元素。你有两个选择:
<br/>
. 当您想显示此评论时,您可以致电<%= Comment %>
<%= Html.Encode(Comment).Replace("\n", "<br/>") %>
哪个更好/更安全取决于每个特定情况,但清理 HTML 标记始终是包含在两者中的任何一个中的一个不错的步骤。一切还取决于允许的格式定义。是否应该将这些作为常规标签或类似于降价的东西或完全不同的东西输入取决于您,最终的代码肯定会取决于它。
<%: Model.CustomerName %>
是的,从现在开始,您总是想在可以使用的地方使用。只有在非常特殊的情况下才应该使用<%= %>
但尽量不要使用它。
如果您正在创建自己不想被编码的 html 助手,那么只需MvcHtmlString
从它们返回 a 。
例如,这是我创建的一个扩展方法,用于在传入的值为 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
.
HTH,
Chares