学海无涯

导航

统计

验证 Valid

自定义验证特性

复制代码
 1 using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;
 2 
 3 namespace MvcMovie.Validations
 4 {
 5     /// <summary>
 6     /// 自定义验证Url特性
 7     /// </summary>
 8     public class ValidUrlAttribute : Attribute, IModelValidator
 9     {
10         public string ErrorMessage { get; set; } = "无效的Url";
11         public ValidUrlAttribute()
12         {
13 
14         }
15         public ValidUrlAttribute(string errorMessage)
16         {
17             ErrorMessage = errorMessage;
18         }
19         public IEnumerable<ModelValidationResult> Validate(ModelValidationContext context)
20         {
21             var url = context.Model as string;
22             if (url != null && Uri.IsWellFormedUriString(url, UriKind.Absolute))
23             {
24                 return Enumerable.Empty<ModelValidationResult>();
25             }
26             return new List<ModelValidationResult>
27             {
28                 new ModelValidationResult(string.Empty,ErrorMessage)
29             };
30         }
31     }
32 }
复制代码

Model模型使用:

1
2
[ValidUrl(ErrorMessage ="Url不正确")]
public string? ConverUrl { get; set; }

效果:

 

远程验证 Remote

客户端调用 Action 方法进行验证

Model 模型添加远程验证特性

1
2
[Remote(nameof(UserController.CheckUserExist), "User",ErrorMessage ="用户已存在")]
public string UserName { get; set; }

在 UserController 控件器中定义远程验证类:

1
2
3
4
5
6
7
8
9
10
11
12
13
[AcceptVerbs("Get", "Post")]
        public async Task<IActionResult> CheckUserExist([Bind(nameof(UserCreateViewModel.UserName))] string userName)
        {
            var user = await m_UserManager.Users.FirstOrDefaultAsync(x => x.UserName == userName);
            if (user == null)
            {
                return Json(true);
            }
            else
            {
                return Json("用户已经存在");
            }
        }

 注意:必须在 View  底部添加脚本

1
2
3
4
5
@section Scripts {
    @{
        await Html.RenderPartialAsync("_ValidationScriptsPartial");
    }
}

  

 

posted on   宁静致远.  阅读(41)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示