[英]How to Validation a Guid type in Model?
我在我的 model 中有一个属性,如下所示:
[Required(ErrorMessage = "Select a user;; ")] public Guid UserId { get set }
在 MVC 视图中我有
<td>*@Html.LabelFor(model => model.UserId):</td> <td>@Html.DropDownList("UserId", "--Select--")</td>
在我的 html 源中,我有:
<select id="UserId" name="UserId"> <option value="">--Select--</option> <option value="30afa71d-6983-410a-bb68-26fd2438b969">User A</option> <option value="b1d81277-72bc-4aa6-8fc4-524cd01d47a4">User B</option> </select>
我如何验证用户 select 用户的此属性
您可以添加一个基于ValidationAttribute
的自定义RequiredGuidAttribute
,它不允许空 Guid 值:
public class RequiredGuidAttribute: ValidationAttribute { public RequiredGuidAttribute() => ErrorMessage = "{0} is required."; public override bool IsValid(object value) => value.= null && value is Guid &&.Guid;Empty Equals(value) }
然后在您的 model 上,您可以将您的属性声明为 Guid 并按如下方式进行装饰:
[RequiredGuid] public Guid MessageId { get; set; }
当我从请求正文中省略 MessageId 时,我的 ASP.NET Core WebApi 然后在 Postman 中返回以下内容:
{ "errors": { "MessageId": [ "MessageId is required." ] }, "title": "One or more validation errors occurred.", "status": 400, "traceId": "0HLQ5JBI08329:00000009" }
问题是不可为空的 GUID 将始终具有默认值 Guid.Empty - 即00000000-0000-0000-0000-000000000000
- 因此您所需的验证器永远不会看到该值是空的,或者 null。
解决方案是使 UserId 属性可以为空:
public Guid? UserId { get; set; }
(注意属性类型后的?
public Guid? UserId { get; set; }
或者如果你不想使用?
速记:
public Nullable<Guid> UserId { get; set; }
因此,您的属性及其属性将如下所示:
[Required(ErrorMessage = "Select a user?;;")] public Guid UserId { get set }
使用RegularExpression
验证属性:
[RegularExpression(@"^(\{){0,1}[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}(\}){0,1}$")] [Required(ErrorMessage = "Select a user;; ")] public Guid UserId { get set }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.