【发布时间】:2013-02-21 13:37:46
【问题描述】:
首先,我必须说我了解基于数据注释的模型验证在 ASP.NET MVC4 中是如何工作的,并且我已经使用DataAnnotationsModelValidatorProvider 成功实现了它。所以我不需要帮助来设置它。
但是当涉及到HtmlHelpers 时,我正在努力尝试找出错误消息的上下文。通过说context,我的意思是我们正在谈论哪个错误。哪个属性返回了错误?
我能得到的是错误的Key 和当前的ErrorMessage,但至少我知道,没有任何东西可以传达我们正在谈论的错误。无论是Required 属性还是其他属性,我都找不到如何区分它们的方法。
让我们稍微打开场景。我有自定义 HtmlHelpers 来渲染 ContentEditable 元素。例如Html.ContentEditableValidationMessageFor(m => m.firstName);。它会输出如下内容:
<span contenteditable="true" data-valmsg-for="firstName" data-valmsg-replace="Please provide first name" class="field-validation-error">Please provide first name</span>
现在,我确实有一个 jQuery 插件来处理和持久化 contenteditable 元素中的更改,并将它们持久化到后端。但是,UI 没有任何内容可以说明我们正在谈论的错误消息。人类可以很容易地看到它是 RequiredAttribute,但在编程上没有数据可以将它与某些 MinLengthAttribute 区分开来。
在这种情况下,如果我只是使用 data-valmsg-for="firstName" 作为本地化的键,那么对于与同一属性有关的所有错误都会返回相同的错误消息。
四舍五入
当ModelState 可用时,为 ModelError 发出唯一 ID 的最佳做法是什么?考虑到我正在使用 ASP.NET MVC4 和 DataAnnotationsModelValidatorProvider。
我可以想出很多方法来“一起破解”,但我想使用 ModelState 和 MVC 提供的任何东西。如果这一切都归结为编写自定义ModelValidatorProvider,那么我完全愿意接受。只要它是最好和最可持续的方式。我完全赞成现在做更多,以后做更少,而不是现在破解它并永远破解它以保持它的工作
【问题讨论】:
-
这对我来说是一个非常有趣的问题。您使用反射进行黑客攻击的基础是什么?和你一样,“你可以通过反射来做到这一点”这句话通常意味着为自己设置的代码不可避免地会维护得很差。会一直关注这个...
-
你想要客户端还是服务器端的数据?
-
你有什么进展吗?
-
我将尽快发布我当前基于反射的实现,因为我们没有得到任何可以被认为是最佳实践的东西。我也在考虑将此作为请求提交给 MVC 团队。
标签: asp.net-mvc data-annotations modelstate asp.net-mvc-validation model-validation