Asp.net mvc 2 您是否使用<;%:%&燃气轮机;或<;%=%&燃气轮机;对于ASP.NET MVC 2.0中的html帮助程序?

Asp.net mvc 2 您是否使用<;%:%&燃气轮机;或<;%=%&燃气轮机;对于ASP.NET MVC 2.0中的html帮助程序?,asp.net-mvc-2,asp.net-4.0,html-encode,Asp.net Mvc 2,Asp.net 4.0,Html Encode,我知道他们现在在ASP.NET MVC 2.0中有这个 因此,当您制作HTML助手时,现在使用这种方式是否更好(前提是您不想进行HTML编码)?是的,从现在起,您总是希望在可以使用的地方使用。只有在非常特殊的情况下才应该使用,但尽量不要使用它 如果您正在创建自己的html帮助程序,而您不希望对其进行编码,那么只需从它们返回一个MvcHtmlString 例如,这是我创建的扩展方法,用于在传入值为真时显示勾号图标 public static MvcHtmlString MECross(this H

我知道他们现在在ASP.NET MVC 2.0中有这个


因此,当您制作HTML助手时,现在使用这种方式是否更好(前提是您不想进行HTML编码)?

是的,从现在起,您总是希望在可以使用的地方使用
。只有在非常特殊的情况下才应该使用
,但尽量不要使用它

如果您正在创建自己的html帮助程序,而您不希望对其进行编码,那么只需从它们返回一个
MvcHtmlString

例如,这是我创建的扩展方法,用于在传入值为真时显示勾号图标

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;
}
public static MvcHtmlString-MECross(此HtmlHelper html、字符串值、字符串文本)
{
if(转换为oolean(值))
{
string spanTag=string.Format(“{1}”,
属性代码(文本),
html.Encode(text));
返回MvcHtmlString.Create(spanTag);
}
返回MvcHtmlString.Empty;
}
注意,我
Encode
AttributeEncode
对扩展方法中可能存在危险的任何内容进行编码,然后返回
MvcHtmlString

HTHs,

Chares

是的,从现在起,您总是希望在可以使用的地方使用
。只有在非常特殊的情况下才应该使用
,但尽量不要使用它

如果您正在创建自己的html帮助程序,而您不希望对其进行编码,那么只需从它们返回一个
MvcHtmlString

例如,这是我创建的扩展方法,用于在传入值为真时显示勾号图标

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;
}
public static MvcHtmlString-MECross(此HtmlHelper html、字符串值、字符串文本)
{
if(转换为oolean(值))
{
string spanTag=string.Format(“{1}”,
属性代码(文本),
html.Encode(text));
返回MvcHtmlString.Create(spanTag);
}
返回MvcHtmlString.Empty;
}
注意,我
Encode
AttributeEncode
对扩展方法中可能存在危险的任何内容进行编码,然后返回
MvcHtmlString

HTHs,
每当显示用户输入/提交的数据时,应使用Chares

Using
,以使网页更安全

但有时候,HTML对所有内容进行编码是不可行的。如果您确实想保留一些HTML格式,该怎么办?在这种情况下,您必须使用常规的
语句。让我们想一个例子,在这种情况下

现实生活中的例子 假设您有一些web内容,用户可以在其中提交他们的评论。您希望提供保留某些格式(至少换行)的功能。在这种情况下,在以后显示这些注释时,必须保留

元素。你有两个选择:

  • 将注释存储在DB中时清理并格式化注释——在这种情况下,您将从提交的注释中删除所有HTML标记,然后将所有新行(\n)替换为

    。当您想显示此评论时,可以调用
  • 在显示注释时清理并格式化注释——在这种情况下,您很可能会将其称为
  • 哪一个更好/更安全取决于每种特定情况,但清除HTML标记始终是包含在这两种情况中的一个很好的步骤。一切还取决于允许的格式定义。这些是否应该作为常规标记或类似标记或完全不同的标记输入取决于您,最终的代码肯定会取决于它

    第二种方法的优点/缺点
    • 优势
      假设您确实提供了一些格式化功能,但大约一年后,您决定更改格式化规则或与之相关的内容(这是很常见的)。如果使用第二种方法,新规则也将适用于旧注释,因为它们是按原样存储的,而第一种方法将失去对旧数据的重要性。例如,如果您在清理/格式化阶段自动检测这些注释中的web链接。使用第一种方法,旧评论中的所有链接都将保持不可点击,但如果使用第二种方法,即使是带有链接的旧评论也会将其格式化为可点击
    • 劣势
      第二种方法比第一种方法使用更多的处理,因为每次显示注释时都必须对其进行预处理,而在第一种方法中,当我们将注释存储在数据库中时,它们只处理一次。根据格式/清理的复杂性和每页评论的数量,这可能会变得非常重要。
      如果处理确实成了问题,您应该考虑使用第一种方法的替代方法,但在清理和重新格式化注释时,您应该将两个版本都保存在数据库中。原始提交的评论以及已处理的评论。因此,当您更改格式规则时,您始终可以重新设置旧注释的格式,因为您存储了原始注释
    • 无论何时显示用户输入/提交的数据,都应使用
      ,以使网页更安全

      但有时候,HTML对所有内容进行编码是不可行的。如果您确实想保留一些HTML格式,该怎么办?在这种情况下,您必须使用常规的
      语句。让我们想一个例子,在这种情况下

      现实生活中的例子 假设您有一些web内容,用户可以在其中提交他们的评论。您希望提供保留某些格式(至少换行)的功能。在这种情况下,在以后显示这些注释时,必须保留

      元素。你有两个选择:

    • 将注释存储在DB中时清理并格式化注释