asp.net中使用Page.Validate()和Page.IsValid进行服务器端验证

一、

Page.IsValid属性,获取一个值,该值指示页验证是否成功。

如果页验证成功,则为 true;否则为 false

若要使此属性返回 true,当前验证组中的所有验证服务器控件必须都验证成功。只有在已调用 Page.Validate 方法,或已在开始窗体处理的 ASP.NET 服务器控件的 OnServerClick 事件处理程序中将 CausesValidation 属性设置为 true 后才可以选中该属性。这些服务器控件包括 ButtonHtmlButtonHtmlInputButtonHtmlInputImageImageButton 以及 LinkButton 类。

如果强制使用 Validate 方法对验证组进行验证,那么指定验证组中的所有验证控件也必须都验证成功。

二、

通常我们在ASPX上面设置各种验证控件就可以对表单输入项进行检查,但这个功能在客户端关掉JavaScript之后,就over了。


为了防止某些坏人搞破坏,ASP.NET在Page_Load事件之后,会执行Page.Validate()去启动验证控件的服务器端验证代码,验证结果会放入Page.IsValid中,这样我们在后续的代码中就可以通过Page.IsValid来判断全部数据是否合法。

而如果我们想在Page_Load事件中就知道是否有非法数据,那就需要在Page_Load事件中先调用Page.Validate()进行检查。

button的click事件处理代码这样就可以了(当然是没有设置ValidationGroup的情况下)

//Page.Validate执行前
    protected void Page_Load(object sender, EventArgs e)
    {
        if (IsPostBack == true)
        {
            Page.Validate();
            if (Page.IsValid == true)
            {//验证成功
                DoSomeThing();
            }
            else
            {//验证失败
                return;
            }
        }
    }

    //Page.Validate已执行后
    protected void btnSave_Click(object sender, EventArgs e)
    {
        if (Page.IsValid == true)
        {//验证成功
            DoSomeThing();
        }
        else
        {//验证失败
            return;
        }
    }

解释:验证

页面中的验证控件是否全部通过...但是验证控件都相当于js验证,如果不通过,就不会通过客户端的验证,显然就不会去后台去执行这个page.isvalid,可以通过设置验证控件的

causescriptvalidate为false来忽略客户端验证,进行后台验证,那这个验证控件的意义岂不是丢了...后来发现在浏览器中可以在js执行完了之后去修改对应的值,这样就造成的脏数据,这

就是在后台使用page.isvalid的好处了:为了防止某些(强人)的(更新),这边加上page.isvalid相当于双层保险

备注
若要使该属性返回 true,Page.Validators 属性中的所有验证服务器控件必须都验证成功。只有在已调用 Page.Validate 方法,或已在开始窗体处理的 ASP.NET 服务器控件的 OnServerClick 处理程序中将 CausesValidation 属性设置为 true 后才可以选中该属性。这些服务器控件包括 Button、HtmlButton、HtmlInputButton、HtmlInputImage、ImageButton 以及 LinkButton 类。
示例
[Visual Basic, C#, JScript] 下面的示例说明使用 IsValid 属性设置条件语句。如果该属性返回 true,则 lblOutput 控件的 Text 属性被设置为“Page is valid!”。否则,它被设置为“Some of the required fields are empty”。
[Visual Basic] 
Sub ValidateBtn_Click(sender As Object, e As EventArgs)

   If (Page.IsValid) Then
      lblOutput.Text = "Page is Valid!"
   Else
      lblOutput.Text = "Some of the required fields are empty"
   End If

End Sub

不能太依赖客户端验证,服务器端也要再验证

customvalidator控件在焦点移开验证控件时不会进行验证,通过比如按钮的事件来检测是否page.isvalid。

猜你喜欢

转载自blog.csdn.net/lishimin1012/article/details/80050411
今日推荐