我有一个自定义类(ServerSideValidator.vb)验证服务器端的用户输入(它不使用任何.NET内置的验证器,因此Page.Validate()不是我的选项)。我在page.IsPostback事件上调用Validate()方法,并且该类执行没有任何问题
我的问题是,当验证失败(返回false)时,我想停止回发事件处理程序,但是加载页面以及其中的所有控件和用户输入值。如果我这样做,Response.End(),页面出现空白。我可以通过编程方式指示页面转到上一页(回发前的原始表单),但它会丢失所有用户输入。
我想在页面代码隐藏文件中创建一个全局布尔变量,并在执行任何回发方法之前检查该值,但是这种方法从我的计划中删除了提供类本身内部的所有功能。页面对象被引用到ServerSideValidator。
似乎我在Page类中遇到的所有与回发相关的属性/变量都是'Readonly'而我无法分配值来控制/阻止回发事件被触发。
关于如何实现这一目标的任何问题?如果您需要更多详细信息,请与我们联系
答案 0 :(得分:0)
每次回发到同一页面并在那里进行验证可能更容易,特别是在页面加载事件上。如果验证失败,您已经在正确的页面上,而不必转到上一页。如果验证成功,那么您可以根据需要重定向到另一个页面,在这种情况下,您可能不需要任何数据。
编辑:这不是您要求的,但我觉得它可以在适合现有的ASP.NET验证设计时做您想做的事情。请参阅http://www.dotnetcurry.com/ShowArticle.aspx?ID=197和http://www.4guysfromrolla.com/articles/073102-1.aspx
基本上,您可以像现在一样创建自定义类,但继承自BaseValidator。要按照您的设计,您可以创建一个名为ValidationType的枚举,它具有字母,字母数字等。在您的自定义类中,创建一个名为ValidationType的属性,该属性使用ValidationType枚举。当然,您必须添加所有验证逻辑。然后在您的aspx页面中,您可以将自定义验证器添加到页面并设置ValidationType =“Alphabetic”等,并提供完整的IntelliSense支持。
由于您使用BaseValidator,所有常规验证技术都可以使用,包括Page.Validate(),Page.IsValid等。如果您愿意,您甚至可以创建客户端验证JavaScript。
话虽如此,有人可能已经为你完成了大部分工作。