自定义验证

时间:2009-12-18 03:21:47

标签: asp.net-mvc validation

人们如何对数据进行验证?

基本上我要求申请保险需要超过14岁。

现在,在申请表上,您可能不仅需要输入您的年龄,还需要输入任何指定的司机出生日期。

我浏览了Nerd Dinner示例并且它有效,但我想知道是否有人正在进行其他类型的验证。

5 个答案:

答案 0 :(得分:4)

您可以使用DataAnnotations直接将验证附加到对象。

Validating with Data Annotation Validators

您可以通过创建自定义数据注释来获得幻想,然后允许您在特定类型的字段上创建验证。

因此符合您的年龄要求;

因此;

public class IsApplicantOldEnoughAttribute : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        if (value == null) return false;
        DateTime enteredDate = (DateTime)value;

        if ((DateTime.Today.Year - enteredDate.Year) >= 14)
            return true;
        else
            return false;
    }
}

然后你的模型可以装饰这个领域;

[IsApplicantOldEnough(ErrorMessage="Applicant must be over 14 years of age")]
[Required]
public DateTime DateOfBirth { get; set; }

然后在你看来;

<p>
  <label for="UnitPrice">DOB:</label>
  <%= Html.TextBox("DateOfBirth")%>
  <%= Html.ValidationMessage("DateOfBirth", "*")%>
</p>

然后你的控制器看起来像这样;

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Apply([Bind(Exclude = "Id")]Applicant newApplicant)
{
  if (!ModelState.IsValid)
    return View();

  return RedirectToAction("Success");
}

这是一项更多的工作,但您每次想要验证某些数据时都不需要自己调用方法。

这也意味着所有使用此模型的应用程序都会将相同的业务规则应用于您的年龄,从而在整个组织内提供一致性。

我实际上碰巧有一些方面的上述方便。我在我的物体中经常使用它。请记得将它包装在Try / Catch中。

答案 1 :(得分:2)

答案 2 :(得分:1)

我是xVal的粉丝。它使用起来非常简单,如果需要,您可以非常轻松地创建自定义验证规则,并且它与jQuery Validation的集成是邪恶的。看看吧。

答案 3 :(得分:1)

从实践中,最好是使用FluentValidation。唯一的缺点是如何在客户端使用它,但如果您的应用程序需要比xVal中使用的更详细的客户端消息和样式,那么这是要采用的方法,在其他情况下使用xVal

答案 4 :(得分:0)

书呆子晚餐是作为“Professional ASP.NET MVC 1.0”的一个例子而开发的,它的第一章是免费提供的,它基本上遍及整个应用程序并涵盖验证和自定义验证。您可以在以下网址下载:

http://aspnetmvcbook.s3.amazonaws.com/aspnetmvc-nerdinner_v1.pdf

相关问题