我知道永远不要相信用户输入,因为不良输入可能会以某种方式损害应用程序的完整性,无论是偶然的还是有意的; 但是,即使页面上没有验证控件,也有一种调用Page.IsValid的情况(同样,我知道通过省略验证来信任用户输入的不良做法)?Page.IsValid是否执行任何其他类型的验证?我查看了MSDN,文档似乎表明只有在页面上有验证控件或者调用了Page.Validate方法时,Page.IsValid才有效.我的一个朋友建议我每次都在按钮单击处理程序中检查Page.IsValid,即使没有验证控件或显式的Page.Validate调用.
我会第一个告诉你" 所有的输入都是邪恶的,直到证明不然. "然而,在这种情况下,我认为你的朋友是错的,因为根据他/她的逻辑,我们可能会提出一百个应该是的其他属性检查或设置,即使默认值是可以的.
Page.IsValid
如果您有"CausesValidation"方案,则仅检查有意义 - 提交表单的按钮的CausesValidation
属性设置为True.这将自动调用,Page.Validate
并且ValidationGroup
将检查属于同一个的所有验证控件的有效性.
编辑:
只需使用Reflector检查它,如果Page没有任何Validator(ValidatorCollection为null),函数将始终返回True.
您可以通过检查Page.IsValid属性检查页面的有效性,检查Page.IsValid的目的可能会有所不同
如果您有将EnableClientScript属性设置为false的Validators
如果您有服务器端验证的Validator.
在PostBack事件处理程序主体中执行关键操作之前,如保存,删除,验证 ...
根据页面的有效性进行/显示不同的内容......
你能想到的任何事情......
所以你何时/何地可以调用Page.IsValid
如果页面在回发中
如果回发是由CauseValidation属性设置为true的输入控件引起的.
在调用Page.Validate之后,即在Page.Load事件之后.
如果调用的地点/时间满足上述条件,您可以在页面生命周期中检查Page.IsValid; 否则Page.IsValid将导致抛出System.Web.HttpException.
你应该在有意义的地方使用Page.IsValid ; 就像在输入控件的回发事件处理程序中(使用CausesValidation = true)并要求页面状态有效以正确执行其任务.(如果您有服务器端验证的验证器或验证器,客户端验证关闭,它必须成为必须).
protected void btnSave_Click(object sender, EventArgs e) { //Note that there might be ServerSideValidation which evaluated to false. if (!Page.IsValid) return; CurrentEntity.Save(); }
最后请注意,Page.IsValid仅检查页面上验证器控件中的验证错误,这完全取决于验证器控件的作用.