【问题标题】:ModelState.AddModelError encodes HTMLModelState.AddModelError 编码 HTML
【发布时间】:2015-10-16 23:10:05
【问题描述】:

在使用 ModelState.AddModelError 验证表单上的输入时,我注意到一个奇怪的问题。 Html.ValidationMessage 的输出不是真正的 HTML 值,而是编码值,因此 CSS 样式不会应用于错误消息。

例子:

private string errorMessage = "<span class=\"negative\">{0}</span><br class=\"hid\" />";
ModelState.AddModelError("title", String.Format(errorMessage, "Tab title is required"));

输出显示为:

<span class="field-validation-error">&lt;span class=&quot;negative&quot;&gt;URL is Required&lt;/span&gt;&lt;br class=&quot;hid&quot; /&gt;</span>

以前的测试版并非如此,我不确定在这里采取什么方法。

谢谢 尼克

【问题讨论】:

    标签: asp.net-mvc validation


    【解决方案1】:

    还有另一种方法可以做到这一点,而无需创建自己的扩展。

    例如,我们的一个控制器中有以下内容:

    ModelState.AddModelError("Name", "<b>Please Use a Valid Person Name</b>");
    

    然后我们可以在我们的视图中执行以下操作:

    @if(Html.ValidationMessageFor(x => x.Name) != null){
        @Html.Raw(Html.ValidationMessageFor(x => x.Name).ToString())
    }
    

    这将防止'&lt;b&gt;Please Use a Valid Person Name&lt;/b&gt;'的错误信息被编码。

    【讨论】:

    • 我不知道这是否一次有效,但我可以确认它在 MVC 3 中不起作用。
    • @Html.Raw(HttpUtility.HtmlDecode(Html.ValidationMessageFor(x => x.Name).ToHtmlString()));
    【解决方案2】:

    创建您自己的模拟 Html.ValidationMessage 的扩展方法...?

    我不得不做类似的事情,因为内置的 MVC 验证内容(ModelState、ValidationMessage 等)不能满足页面上具有多个表单的页面。

    【讨论】:

    • 你是对的 - 我更新了错误的项目。它们都与 html 的编码有关——我只是更新了错误的。我已经删除了更新。感谢您的关注。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-14
    • 1970-01-01
    • 1970-01-01
    • 2013-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多