首先,我必须说我了解基于数据注释的模型验证在 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 提供的任何东西。如果这一切都归结为编写一个 custom ModelValidatorProvider
,那么我完全愿意接受它。只要它是最好和最可持续的方式。我完全赞成现在做的比现在做的多,以后做的少,然后永远破解以保持工作