加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – ASP.NET MVC模型验证错误本地化上下文

发布时间:2020-12-16 06:48:44 所属栏目:asp.Net 来源:网络整理
导读:首先,我必须说我理解基于数据注释的模型验证如何在ASP.NET MVC4中工作,并且我已成功使用DataAnnotationsModelValidatorProvider实现它.所以我在设置它时不需要帮助. 但是当它归结为HtmlHelpers时,我正在努力尝试计算错误消息的上下文.通过说上下文,我的意思
首先,我必须说我理解基于数据注释的模型验证如何在ASP.NET MVC4中工作,并且我已成功使用DataAnnotationsModelValidatorProvider实现它.所以我在设置它时不需要帮助.

但是当它归结为HtmlHelpers时,我正在努力尝试计算错误消息的上下文.通过说上下文,我的意思是我们正在谈论的错误.哪个属性返回错误?

我能得到的是错误的关键和当前的ErrorMessage,但是在程序上,没有什么,至少我知道,这会传达我们正在谈论的错误.无论是必需属性还是其他属性,我都无法找到如何区分它们.

让我们稍微打开一下场景吧.我有自定义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,那么我全都开放了.只要它是最好和最可持续的方式.我现在所做的就是为了做更多的事情,而不是现在做更多的事情,而不是现在就把它劈开并永远黑客行动以保持工作

解决方法

你能否提出一些关于需要知道哪个规则触发验证错误的背景,是否可以尝试做一些你不应该做的事情?

通常,我使用FluentValidation(http://fluentvalidation.codeplex.com/wikipage?title=mvc)代替Data Annotation验证有很多原因,去杂乱模型,单元测试验证逻辑,允许包含业务逻辑的更复杂的验证.如果您可以免费使用第三方库,我会先看看它,因为它总能解决我过去遇到的任何验证问题.

它允许您编写c#代码,通过流畅的API处理模型验证.它有一个MVC扩展,可以为您提供所有内容,因此除了创建模型验证类之外,从那时起几乎没有什么影响.上面代码片段的示例是……

RuleFor(modelname => modelname.FirstName).NotEmpty().WithMessage("lease provide first name");

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读