ASP.NET的服务端验证(干货)

        最近有项目需要使用.net的web,啥也不说,直接开始学习.net的mvc框架。感觉微软的web项目其实还是很好用的,今天和大家分享一下服务端验证的事情。其实原理就是用到了c#的特性,特性不用多说,大家都应该很清楚,也是一个类,标记了特性的类或者方法,就可以是用特性类的数据,并且打上了一个特殊的标记,以方便我们进行区分从而进行调用。

       话不多说,直接开始!

第一步:自定义特性类

public class CustomAttribute : ValidationAttribute
    {
        public Int32 age { get; set; }
        public CustomAttribute(int age)
        {
            this.age = age;
        }
        //这里的value参数来源于字段值
        public override bool IsValid(object value)
        {
            if ((Int32)value < this.age)
                return false;
            else
                return true;
        }

        //这里的name参数来源于ErrorMessage
        public override string FormatErrorMessage(string name)
        {
            return name+"必须大于20";
        }
    }

继承于ValidationAttribute,并且主要是重写IsValid和FormatErrorMessage。

第二步:定义model,并且添加特性

public class People
    {
        [Display(Name = "姓名")]
        public string name{get;set;}

        [Display(Name = "年龄")]
        [Custom(30,ErrorMessage ="年龄")]
        public int? age { get; set; }
    }

第三步:前端代码,前端借用了HTML的封装方法快速生成字段,注意这里需要在css中设置field-validation-error的颜色,否则提示不明显

@using MiniWeb.Models
@model People
@{
    ViewBag.Title = "addPeople";
}
<style type="text/css">
    .field-validation-error {
        color:red;
    }
</style>

<div class="container">
    <h2>addPeople</h2>

    <form action="doAdd" method="post">
        @using (Html.BeginForm())
        {
            @Html.EditorForModel()
            <input type="submit" value="提交" />
        }
    </form>
</div>

第四步:action的代码,通过内置属性ModelState.IsValid来判断是否通过验证

public ActionResult doAdd(People p)
        {
            if (!ModelState.IsValid)
            {
                return View("addPeople");
            }
            return Content("成功");
        }

至此完毕!总结一下整个过程,当前端调用action的时候,后台默认都会检查model对象是否定义了特性验证,正是因为这个原因才会最终进入验证判断。验证的详细结果在前台我们通过@HTML.ValidationMessageFor可以获取。本实例中@Html.EditorForModel()已经把ValidationMessageFor封装进去了。通过本例我们可以看到,微软封装的强大和服务端验证的实际后台逻辑到底是如何实现的!

猜你喜欢

转载自www.cnblogs.com/pettyColorcat/p/8980694.html