【问题标题】:Razor, asp.net, C#: how to validate a form field that is required and allows HTML snippets?Razor、asp.net、C#:如何验证需要并允许 HTML 片段的表单字段?
【发布时间】:2014-05-30 00:16:29
【问题描述】:

我正在使用 Razor 做一个单一的概念验证 cshtml 页面,没有控制器。我使用 ASP.NET 4.5。

此页面有一个表单。它的动作也指向这个页面。因此,当表单提交时,它会转到同一页面。

表单有一个名为“描述”的字段。它是必填字段,但允许用户输入 html sn-ps。

我有以下检查用户输入:

Validation.RequireField("description", "Description is required.");

但是,当用户在“描述”字段中输入 html sn-ps 并提交表单时,网站会显示以下错误消息:

    A potentially dangerous Request.Form value was detected from the client (Description="<p>This bilingual.....
....
Line 43:             description = Request.Form["description"];
.....

此页面处于非常安全的环境中,因此允许使用 html sn-ps。

让我们把最佳做法放在一边。如何使描述字段成为必填项并同时允许 html sn-ps?我的表单中有多个字段允许使用 html sn-ps。

希望能找到不碰web.config的解决方案。

问候和感谢。

【问题讨论】:

    标签: c# validation razor


    【解决方案1】:

    我尝试了 mxmissle 建议的解决方案,但对我不起作用。我只有一个具有表单和后处理代码的 cshtml 页面。

    我阅读了许多在线帖子,但找不到适合我的帖子。最终,我尝试了一些如此简单但有效的方法。而不是使用

    description = Request.Form["description"];
    

    使用

    description = Request.Unvalidated["description"];
    

    后者在没有任何运行时投诉的情况下使用 html 标签获取用户输入。还有

    Validation.RequireField("description", "Description is required.");
    

    仍然有效。

    有趣的是,我在网上找到了很多关于此错误消息的帖子,但都没有提到 Request.Unvalidated。我不确定我所做的是否正确,但它对我有用。如果有人知道更好的方法,请告诉我。

    希望这对其他人有所帮助。

    【讨论】:

      【解决方案2】:

      我建议您只需将以下属性添加到您的模型属性。

      [AllowHtml]
      MyHtml
      

      【讨论】:

      • 感谢您的参与!!!在我的情况下它不起作用。我在此页面上没有任何模型对象。通过 Request.Form["description"] 简单地检索表单值。
      【解决方案3】:

      将以下内容添加到您的控制器类中:

      [HttpPost]
      [ValidateInput(false)]
      

      [HttpGet]
      [ValidateInput(false)]
      

      请记住,这样做会使您自己受到攻击。因此,请确保您已采取适当的步骤来确保您的网站安全。

      【讨论】:

      • 感谢您的意见。我没有任何控制器类。我所拥有的只是一个页面。
      • 我不明白。你是说你只有一个观点,没有别的吗?
      • 处理代码在同一个页面。是的,只是一个视图。这是一个单页的概念验证。我没有图层。
      【解决方案4】:

      不推荐,但将其添加到您的 web.config 应该可以解决问题。

      <system.web>
        <httpRuntime requestValidationMode="2.0" />
      </system.web>
      

      【讨论】:

      • 这是我添加你的之后的内容。 。我仍然遇到同样的错误。
      • 我不认为这与 Razor 有任何关系,但也尝试将 &lt;pages validateRequest="false" /&gt; 添加到 system.web 部分。
      • 我用谷歌搜索了你所说的两件事。没有成功。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-22
      • 2011-04-29
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多