📅  最后修改于: 2023-12-03 15:13:32.124000             🧑  作者: Mango
在 ASP.NET MVC 中,验证机制是非常重要的。验证可以确保输入的数据是有效和合法的,从而保证系统安全和正确性。ASP.NET MVC 提供了多种验证的方式,可以满足不同的业务需求。
ASP.NET MVC 提供了以下几种验证方式:
属性验证是 ASP.NET MVC 的默认验证方式,也是最为常用的方式。它通过属性注释来标识验证规则,可以方便地进行开发和维护。
在模型类中,可以通过 System.ComponentModel.DataAnnotations
命名空间中的注释来标识验证规则。例如,下面的代码使用 Required 注释标识 Name 属性不能为空。
public class Product
{
[Required]
public string Name { get; set; }
public string Description { get; set; }
}
ASP.NET MVC 会在模型绑定时自动进行属性验证。如果验证失败,会自动将错误信息添加到 ModelState 对象中,方便在视图中显示错误信息。
[HttpPost]
public ActionResult Create(Product product)
{
if (ModelState.IsValid)
{
// 保存数据
return RedirectToAction("Index");
}
else
{
// 显示错误信息
return View(product);
}
}
属性验证只能验证单个属性,如果需要对多个属性进行验证,就需要使用模型验证。模型验证在控制器中手动进行,可以使用 TryValidateModel()
或 ValidateModel()
方法进行验证。例如,下面的代码使用 ValidateModel() 方法验证 Product 对象的所有属性是否符合规则。
[HttpPost]
public ActionResult Create(Product product)
{
if (ModelState.IsValid)
{
if (ValidateModel(product))
{
// 保存数据
return RedirectToAction("Index");
}
}
// 显示错误信息
return View(product);
}
客户端验证可以在用户输入数据时实时地进行验证,提高用户体验。ASP.NET MVC 提供了多种方式来实现客户端验证,包括使用 jQuery、使用自定义的验证器等。下面的代码使用 jQuery 验证插件来实现客户端验证。
@using (Html.BeginForm())
{
@Html.TextBoxFor(m => m.Name)
@Html.ValidationMessageFor(m => m.Name)
@Html.TextBoxFor(m => m.Price)
@Html.ValidationMessageFor(m => m.Price)
<input type="submit" value="提交" />
}
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
在某些情况下,需要对特定的数据进行自定义验证,这时可以编写自定义的验证器类来实现。自定义验证器类必须继承 System.ComponentModel.DataAnnotations.ValidationAttribute
类,重写 IsValid()
方法来实现验证逻辑。例如,下面的代码实现了一个验证商品价格是否大于 0 的自定义验证器类。
public class PriceValidator : ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (value is decimal price && price > 0)
{
return ValidationResult.Success;
}
else
{
return new ValidationResult(ErrorMessage ?? "价格必须大于 0");
}
}
}
public class Product
{
public string Name { get; set; }
[PriceValidator]
public decimal Price { get; set; }
}
自定义验证器类可以与属性验证或模型验证一起使用,例如在模型类中使用自定义验证器:
public class Product
{
[Required]
public string Name { get; set; }
[PriceValidator]
public decimal Price { get; set; }
}
ASP.NET MVC 提供了多种验证方式,可以根据业务需求选择合适的方式进行验证。属性验证是默认的验证方式,对于简单的验证非常方便。模型验证可以实现更复杂的验证逻辑,客户端验证可以提高用户体验,自定义验证器类可以满足更特定的需求。掌握 ASP.NET MVC 的验证机制,可以帮助我们编写更安全可靠的应用程序。