ASP.NET Core MVC 中的模型验证

蓝色海洋 2024-03-12 ⋅ 28 阅读

ASP.NET Core MVC 是一种基于模型-视图-控制器(Model-View-Controller)架构的 Web 应用程序开发框架。在使用 ASP.NET Core MVC 进行开发时,模型验证是非常重要的一部分。模型验证可以确保从客户端提交的数据符合预期,并保证应用程序的安全性和有效性。本文将介绍 ASP.NET Core MVC 中的模型验证,并提供一些关于模型验证的实用技巧。

1. 为模型属性添加验证规则

在 ASP.NET Core MVC 中,可以通过在模型属性上添加验证特性来为其添加验证规则,例如:

public class User
{
    [Required(ErrorMessage = "用户名必填")]
    public string UserName { get; set; }

    [EmailAddress(ErrorMessage = "请输入有效的邮箱地址")]
    public string Email { get; set; }

    [Range(18, 99, ErrorMessage = "年龄必须在18到99岁之间")]
    public int Age { get; set; }
}

在上述示例中,Required 特性表示 UserName 属性是必填字段,EmailAddress 特性表示 Email 属性必须是有效的邮箱地址,Range 特性表示 Age 属性的值必须在 18 到 99 之间。当模型验证失败时,ASP.NET Core MVC 会自动将错误信息显示给用户。

2. 手动进行模型验证

除了使用特性来进行模型验证外,还可以在控制器中手动调用 ModelState.IsValid 方法对模型进行验证。例如:

public class UserController : Controller
{
    [HttpPost]
    public IActionResult Create(User user)
    {
        if (!ModelState.IsValid)
        {
            // 处理模型验证失败的情况
        }

        // 处理模型验证成功的情况
    }
}

在上述示例中,ModelState.IsValid 方法用于检查模型是否通过验证。如果模型验证失败,则可以根据具体情况进行相应的处理。

3. 自定义模型验证规则

除了使用内置的验证特性外,还可以自定义模型验证规则。可以通过创建自定义验证特性并实现 ValidationAttribute 类来实现自定义验证规则。例如:

public class ValidUrlAttribute : ValidationAttribute
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        if (value != null)
        {
            string url = value.ToString();

            if (!Uri.IsWellFormedUriString(url, UriKind.Absolute))
            {
                return new ValidationResult(ErrorMessage);
            }
        }

        return ValidationResult.Success;
    }
}

在上述示例中,ValidUrlAttribute 自定义验证特性用于判断一个字符串是否为有效的 URL 地址。可以通过重写 IsValid 方法来自定义验证规则。然后,可以像使用内置的验证特性一样使用自定义验证特性。

4. 显示验证错误信息

在 ASP.NET Core MVC 中,可以通过使用 ValidationSummaryValidationMessage HTML 辅助方法来显示模型验证错误信息。

@model User

@{ 
    ViewData["Title"] = "创建用户";
}

<h1>@ViewData["Title"]</h1>

<form asp-action="Create">
    <div class="form-group">
        <label asp-for="UserName"></label>
        <input asp-for="UserName" class="form-control" />
        <span asp-validation-for="UserName" class="text-danger"></span>
    </div>
    
    <div class="form-group">
        <label asp-for="Email"></label>
        <input asp-for="Email" class="form-control" />
        <span asp-validation-for="Email" class="text-danger"></span>
    </div>
    
    <div class="form-group">
        <label asp-for="Age"></label>
        <input asp-for="Age" class="form-control" />
        <span asp-validation-for="Age" class="text-danger"></span>
    </div>
    
    <input type="submit" value="创建" class="btn btn-primary" />
    
    <div asp-validation-summary="All"></div>
</form>

在上述示例中,asp-validation-for 属性用于显示对应属性的验证错误信息,asp-validation-summary 属性用于显示所有的验证错误信息。

通过以上几个步骤,我们可以在 ASP.NET Core MVC 中进行模型验证,并使用各种方式来显示验证错误信息。模型验证是 ASP.NET Core MVC 开发中不可或缺的一部分,能够大大提升应用程序的可靠性和用户体验。


全部评论: 0

    我有话说: