Asp.net mvc 5 Asp.Net MVC验证摘要HTML错误消息

Asp.net mvc 5 Asp.Net MVC验证摘要HTML错误消息,asp.net-mvc-5,Asp.net Mvc 5,当注册的电子邮件地址已经在使用时,我被要求在错误消息中包含一个链接 此属性的验证使用模型上的IValidatableObject.Validate函数完成。我的验证函数看起来像这样 Public Overridable Function Validate(validationContext As ValidationContext) As IEnumerable(Of ValidationResult) Implements IValidatableObject.Validate Dim

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

此属性的验证使用模型上的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
我知道我可以删除helper.Encode,然后将消息作为原始html输出,但这感觉有点不对劲

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

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

我可以做到这一点,但我不知道是否有任何方法可以从MyValidationSummary获得这个自定义ValidationResult

更新:
目前,我只是在错误消息中添加了一个占位符标记,然后用MyValidationSummary扩展方法中的实际链接替换它。这很粗糙,但在我找到更好的方法之前它会起作用。

你忘了模型绑定吗?@Prageethgodage抱歉,我不懂?我正在做模型绑定,但我不确定这有什么关系。为什么你要用代码生成html我觉得这是一项非常昂贵的工作。你不能将UI逻辑分离出来处理UI本身,并将其作为支持工作来处理非复杂的仅工作的业务逻辑。我愿意用更好的方法来完成我需要做的事情。基本上,我只需要一个好方法来检查电子邮件地址是否可用,如果不可用,则显示一条错误消息,其中包括指向“忘记密码”控制器操作的链接。在上面的示例中,我刚刚硬编码了链接。实际上,我会使用一个扩展来获得控制器和操作的正确路径。
....

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())