代码之家  ›  专栏  ›  技术社区  ›  SimonGates

在中优雅地处理表单提交时的HTML标记asp.netMVC 2型

  •  1
  • SimonGates  · 技术社区  · 14 年前

    我试图想出一种优雅的方式来处理用户试图输入的任何HTML—您可能会意识到MVC2对文本中的任何HTML都会抛出一个错误。

    我使用ViewModels并用DataAnotation类中的过滤器装饰我的属性来验证我的表单。

    是否有一些疯狂的正则表达式将不匹配HTML,但任何其他或其他方式?

    2 回复  |  直到 14 年前
        1
  •  3
  •   user151323 user151323    14 年前

    添加以下属性将停止运行时抱怨:

    [ValidateInput(false)]
    public ActionResult SomeEvilAction ()
    {
        /* ... */
    }
    

    现在,您的任务是对页面上显示的每个输入进行HTML编码:

    <%= HttpUtility.HtmlEncode (Model.Text) %>
    

    <%: Model.Text %>
    
        2
  •  0
  •   jimplode    14 年前

    前几天我在一个网站上做了这个。

    我使用的是一个所见即所得编辑器,放入正确的html,而不是bb代码。

    我从page指令中禁用了对页面的验证,以阻止mvc抛出潜在的不安全代码异常,并使用regex删除了所有脚本标记实例。

    您可能需要将此添加到web.config文件

    <httpRuntime requestValidationMode="2.0" />
    

    我使用的正则表达式如下:

    (?<startTag><\s*script[^>]*>)(?<scriptContent>[\s\S]*?)(?<endTag><\s*/script>)
    

    脚本内容 结束标记

    因此,您可以对script元素进行替换并显示脚本的内容,或者将其全部删除。

    任何你真正想做的事。