未获取 GUID 的数据值属性
本文关键字:属性 数据 获取 GUID | 更新日期: 2023-09-27 18:31:38
我正在做一个更大的项目,我们有很多视图,几乎所有视图都有一个或更多的选择列表,其值是GUID。视图模型工作正常,服务器端验证也是如此,问题是 HTML select 元素没有获得任何 data-val 属性,我们使用的是 Html.DropDownListFor。当值很短、字符串等但不是 GUID 时,它工作正常。
有没有办法在不向视图模型中的所有 GUID 属性添加验证属性的情况下获取数据值属性?因为他们有战利品。
最后对我有用的是:
Stephen Muecke的回答让我走上了正确的轨道:我们正在使用我们自己的RequiredAttribute:
public class LocalizedRequiredAttribute : RequiredAttribute
{
public LocalizedRequiredAttribute()
{
ErrorMessageResourceName = "Required";
ErrorMessageResourceType = typeof (Resources.ErrorMessages);
}
}
但这不会像基本[Required]
那样添加任何客户端验证属性,但很容易修复。只需将此代码添加到您的Application_Start()
:
DataAnnotationsModelValidatorProvider.RegisterAdapter(
typeof (LocalizedRequiredAttribute),
typeof (RequiredAttributeAdapter));
现在你会得到data-val=true data-val-required="message"
.此处找到的解决方案:https://stackoverflow.com/a/12573540/1225758
呈现data-val-*
属性,因为 GUID 没有jquery.validate.unobtrusive
适配器。唯一可以开箱即用的是 data-val-required
(以及关联的data-val
),如果要使属性可为 null 并添加 [Required]
属性。
如果你想要一些客户端验证,你可以使用 [RegularExpression]
属性(未经测试,但我认为^[A-Za-z0-9]{8}-[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[A-Za-z0-9]{12}$
应该可以工作)。
但是,这似乎是不必要的,因为您正在使用@Html.DropDownListFor()
并且(我假设)您在控制器上构建一个SelectList
,该将仅包含SelectListItem.Value
属性的 GUID(为什么要呈现一个无效的选项 - 除了可能与[Required]
属性一起使用的"--请选择--"标签选项?
首先,我想知道在模型属性上具有多个 GUID 数据注释有什么问题?
其次,我想说的是,对于从事该项目的其他开发人员来说,对每个属性进行数据注释进行显式验证比进行一些"非标准"验证巫毒教要清晰易读得多。
您可能可以使用操作过滤器(查找任何类型 Guid
的属性)来实现这一点,但我认为这将使模型的使用/规范不太能表达其意图,并且只会混淆。
Guid 的内容中有破折号,可能会出现问题。您可以尝试在生成它们的 Guid 末尾使用.ToString('N')
来删除破折号。或者你可以写一个jquery技巧,在客户端的破折号之前添加转义字符。甚至更多;尝试实现自己的 GUID 验证方法,如下所示:如何测试有效的 UUID/GUID?
甚至更多,您可以尝试实现自己的 guid 注释属性,如下所示:指导的验证