asp.net-mvc-5 - Asp.Net MVC ValidationSummary HTML 错误信息
问题描述
当注册的电子邮件地址已被使用时,我被要求在错误消息中包含一个链接。
此属性的验证通过模型上的 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,但在我找到更好的方法之前它会起作用。
解决方案
推荐阅读
- python - if-else 行为返回元组
- r - 确定火山图上过滤了哪些 RNA SEQ 数据
- c++ - 计算素数的总和
- typescript - 定义没有索引签名的打字稿对象形状
- java - 如何在Android的谷歌地图片段中更改默认蓝色圆形位置图标?
- java - 在 Fusion Web 应用程序中单击按钮后重新加载 ADF 表
- modeling - 如何在经典的星型模式中对多个产品进行建模?
- javascript - 在 Angular 中为图片标签添加 404 后备
- java - 按谓词拆分 Java 列表并为每个子列表映射不同的函数
- onclick - alpine.js,如何使元素在 self @click 上消失?