11 验证控件1

在前面的一个实例中,我们在注册或登录时都会检查输入是否正确,是不为空等,并且客户和服务端都要检查。

在ASP.net中已提供了验证控件,它会在服务端和客户端进行检查。

如:对用户输入的数据进行合法性校验,这些检验逻辑很多是重复的,比如字段不能为空,必须是日期格式、数字不能大于指定的值等,而且要同时在客户端和服务端校验,客户端校验提高可用性,服务端校验防止恶意攻击。asp.net验证控件就是为了简化这些问题而提供的。

Asp.net提供了如下的控件:

  •   RequiredFieldValidator:字段必填,不能为空。
  •   RangeValidator :值在给定的最大值、最小值之间。
  •   CompareValidator: 用于比较两个值的关系是否满足要求或者是否是指定类型的数据;
  •   RegularExpressionValidator:检验数据满足的正则表达式。
  •   CustomValidator:自定义验证。
  • 如果在一个页面中同时放置注册和登录表单,那么他们的验证就会同时进行,这样即使登录,也会验证注册的东西,我们可以使用验证组来解决这个问题,将同一组的控件(表单、提交按钮、Validator等)的ValidationGroup设为相同的值就可以了,这样的话当点击button提交表单时就只会验证和它ValidationGroup相同名字的控件。
  • 如果将按钮控件(button,imagebutton,linkbutton)的CausesValidation属性设置为false,则这个按钮的点击不触发校验。  比如:在登录页面中有个连接按钮是注册用的,当点击“注册”按钮时并不许去验证用户名等信息,所以只要设置“注册”按钮的CausesValidation属性为false就可以了。

    1. RequiredFieldValidator

        ControlToValidate:设定要验证的控件; Text属性为当初验证的控件属性为空的时候显示的错误信息,Text不仅可写普通文件,也可写任何内容。ErrorMessage主要是显示于ValidationSummary中的,如果Text为空,则会在所连接的控件旁边显示ErrorMessage的内容。

       有时候控件中的一个值为默认值,比如在下拉列表中有个性别选择项,系统默认显示“--请选择性别--”,如果用户名不选择系统要给出提示,你只要把“--请选择性别--”填入此验证控件的InitialValue属性中就可以了,它会把这个值当成空值。

   实例:

      我们在一个表单中放两个panel,分别为登录功能和注册功功能,当注册时就不要验证登录控件,当登录时就不验证注册控件。

     

1). 为了防止登录和注册两个功能相互验证,我们设置登录中的两个text,两个验证控件及登录按钮的ValidationGroup为"login",而"注册"中的那些为"reg".

2).在登录处的用户名“请输入名称”默认为空,就需要在它的验证控件的属性:InitialValue填上"请输入名称".

3).“连接百度”为linkbutton,为了防止它激活表单的验证功能,就设置它的CausesValidation为false即可。

4).分别设置它们的ControlToValidate为要验证的控件,设置它们的ErrorMessage。

5). page有个IsValid属性,它是用来确认服务端是否验证通过,如果有就为true,不能过就不false. 在开发中会经常忘记它的确认,如果不用它,当客户端校验被禁用时,就会在后台直接运行,也只有isValid为true,服务端才会最终验证。

以下为cs的源码:

    protected void btnLogin_Click(object sender, EventArgs e)
        {
            if (!IsValid)
                return;
            lblLoginmsg.Visible = true;
            lblLoginmsg.Text = "登录成功";
        }

        protected void btnReg_Click(object sender, EventArgs e)
        {
            if (!IsValid)
                return;
            lblRegmsg.Visible = true;
            lblRegmsg.Text = "注册成功";
        }

        protected void lkbtn_Click(object sender, EventArgs e)
        {
            Response.Redirect("http://www.baidu.com");
        }
原文地址:https://www.cnblogs.com/yagzh2000/p/3129490.html