编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

C# DataAnnotations 浅析(c# databind)

wxchong 2024-07-22 23:01:41 开源技术 10 ℃ 0 评论

C# 中的 DataAnnotations 是一种用于验证数据模型的属性。通过添加适当的属性,可以验证模型的属性是否满足特定的条件和要求。

下面介绍一些常见的 DataAnnotations 属性:

  1. [Required]

使用 [Required] 属性可以标记模型属性为必填项。例如:

public class UserModel
{
    [Required(ErrorMessage = "请输入用户名")]
    public string UserName { get; set; }

    [Required(ErrorMessage = "请输入密码")]
    public string Password { get; set; }
}
  1. [StringLength]

使用 [StringLength] 属性可以验证字符串属性的最小和最大长度。例如:

public class UserModel
{
    [StringLength(20, MinimumLength = 3, ErrorMessage = "用户名长度必须在3到20个字符之间")]
    public string UserName { get; set; }

    [StringLength(20, MinimumLength = 6, ErrorMessage = "密码长度必须在6到20个字符之间")]
    public string Password { get; set; }
}
  1. [Range]

使用 [Range] 属性可以验证数字属性的取值范围。例如:

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

使用 [RegularExpression] 属性可以验证属性的正则表达式模式。例如:

public class UserModel
{
    [RegularExpression(@"^(\d{3,4}-)?\d{7,8}#34;, ErrorMessage = "请输入正确的电话号码")]
    public string Phone { get; set; }
}
  1. [Compare]

使用 [Compare] 属性可以验证属性与另一个属性的比较。例如:

public class UserModel
{
    [Compare("Password", ErrorMessage = "确认密码与密码不一致")]
    public string ConfirmPassword { get; set; }
}

实际应用中,可以针对不同的场景和需求,组合使用这些属性,并根据情况自定义错误消息。例如:

public class UserModel
{
    [Required(ErrorMessage = "请输入用户名")]
    [StringLength(20, MinimumLength = 3, ErrorMessage = "用户名长度必须在3到20个字符之间")]
    public string UserName { get; set; }

    [Required(ErrorMessage = "请输入密码")]
    [StringLength(20, MinimumLength = 6, ErrorMessage = "密码长度必须在6到20个字符之间")]
    public string Password { get; set; }

    [Compare("Password", ErrorMessage = "确认密码与密码不一致")]
    public string ConfirmPassword { get; set; }

    [RegularExpression(@"^(\d{3,4}-)?\d{7,8}#34;, ErrorMessage = "请输入正确的电话号码")]
    public string Phone { get; set; }

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

以上是一些常用的 DataAnnotations 属性及其用法,可以根据实际情况进行选择和使用。

在使用 DataAnnotations 验证模型时,我们需要添加一些代码来触发模型验证,并检查验证结果。

在 ASP.NET Core MVC 项目中,可以通过添加 [BindProperty] 属性标记来自动绑定模型,并在控制器中使用 ModelState.IsValid 属性来检查模型是否有效。

以下是一个简单的示例控制器:

using Microsoft.AspNetCore.Mvc;
using System.Threading.Tasks;

public class UserController : Controller
{
    [BindProperty]
    public UserModel User { get; set; }

    public IActionResult Index()
    {
        return View();
    }

    [HttpPost]
    public async Task<IActionResult> Register()
    {
        if (!ModelState.IsValid)
        {
            return View("Index");
        }

        // 验证通过,执行注册流程
        // ...

        return View("Success");
    }
}

在上面的示例中,我们使用了 [BindProperty] 属性标记来自动绑定模型中的属性。在 Register 动作中,我们检查了 ModelState.IsValid 属性来验证模型是否有效,如果无效,则返回原视图。如果模型验证通过,则执行注册流程,并显示成功视图。在视图中,可以使用 ValidationSummary() 辅助方法来显示错误消息。

Blazor 中也可以使用 DataAnnotations 来验证模型,并检查验证结果。 Blazor 通过 EditForm 组件来自动绑定数据并验证模型。

以下是一个简单的示例:

@page "/register"
@using System.ComponentModel.DataAnnotations

<EditForm Model="@User" OnValidSubmit="@HandleValidSubmit">
    <DataAnnotationsValidator />
    <ValidationSummary />

    <label>用户名:</label>
    <InputText @bind-Value="@User.UserName" />
    <ValidationMessage For="@(() => User.UserName)" />

    <label>密码:</label>
    <InputText @bind-Value="@User.Password" />
    <ValidationMessage For="@(() => User.Password)" />

    <label>确认密码:</label>
    <InputText @bind-Value="@User.ConfirmPassword" />
    <ValidationMessage For="@(() => User.ConfirmPassword)" />

    <label>电话号码:</label>
    <InputText @bind-Value="@User.Phone" />
    <ValidationMessage For="@(() => User.Phone)" />

    <button type="submit">注册</button>
</EditForm>

@code {
    private UserModel User { get; set; } = new UserModel();

    private void HandleValidSubmit()
    {
        // 验证通过,执行注册流程
        // ...
    }
}

public class UserModel
{
    [Required(ErrorMessage = "用户名是必填项")]
    [StringLength(50, MinimumLength = 3, ErrorMessage = "用户名长度必须在3-50个字符之间")]
    public string UserName { get; set; }

    [Required(ErrorMessage = "密码是必填项")]
    [StringLength(50, MinimumLength = 6, ErrorMessage = "密码长度必须在6-50个字符之间")]
    public string Password { get; set; }

    [Compare("Password", ErrorMessage = "确认密码与密码不一致")]
    public string ConfirmPassword { get; set; }

    [RegularExpression(@"^(\d{3,4}-)?\d{7,8}#34;, ErrorMessage = "请输入正确的电话号码")]
    public string Phone { get; set; }
}

在上面的示例中,我们定义了一个包含模型属性的 UserModel 类。在 Register 页面中,我们使用了 Blazor 的 EditForm 组件来绑定 User 对象,并使用 DataAnnotationsValidatorValidationSummary 组件来验证模型和显示错误信息。在 HandleValidSubmit 方法中,我们可以执行注册流程并处理验证通过的情况。

在 Blazor 中,还有其他验证方式可用,例如使用 FluentValidation 等第三方库。使用哪种方式,可以根据自己的需求和喜好进行选择。

创作不易,如果您喜欢还请帮忙点赞关注,谢谢![作揖]

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表