Asp.Net MVC ValidationSummary HTML错误消息

时间:2018-06-15 04:47:13

标签: asp.net-mvc-5

当注册的电子邮件地址已被使用时,我被要求在错误消息中包含一个链接。

此属性的验证是使用模型上的IValidatableObject.Validate函数完成的。我的验证功能看起来像......

Public Overridable Function Validate(validationContext As ValidationContext) As IEnumerable(Of ValidationResult) Implements IValidatableObject.Validate
    Dim results = New List(Of ValidationResult)()

    ....

    If Not EmailAvailable(Email) Then
        results.Add(New ValidationResult("The email address is not available. <a href=""/forgot_password"">Forgot Password?</a>", {"Email"}))
    End If
    Return results
End Function

在我的观点中,我正在使用自定义的“MyValidationSummary”扩展函数来很好地格式化错误。

扩展功能可以做到这一点......

....

Dim ul = New TagBuilder("ul")
For Each key In helper.ViewData.ModelState.Keys
    For Each e In helper.ViewData.ModelState(key).Errors
        Dim li = New TagBuilder("li") With {
            .InnerHtml = helper.Encode(e.ErrorMessage)
        }
        ul.InnerHtml += li.ToString()
    Next
 Next
 container.InnerHtml += ul.ToString()
 Return New MvcHtmlString(container.ToString())

我知道我可以删除helper.Encode,只是将消息输出为原始html,但这感觉有点hacky。

我正在尝试找到一种很好的方法,能够在消息中有选择地包含html,同时仍保留编码纯文本消息的默认行为。

我想做的是创建一个自定义的ValidationResult类,它可以选择包含一个HTMLString属性,这样我就可以在消息中包含HTML。

我可以这样做,但我不知道是否有办法从MyValidationSummary获取此自定义ValidationResult。

更新: 目前,我刚刚在错误消息中添加了一个占位符标记,然后我将其替换为MyValidationSummary扩展方法中的实际链接。它非常hacky,但它会一直有效,直到我找到了更好的方法。

0 个答案:

没有答案