【问题标题】:How to Prevent PostBack Event Handler from Firing如何防止 PostBack 事件处理程序触发
【发布时间】:2010-05-03 20:32:51
【问题描述】:

我有一个自定义类 (ServerSideValidator.vb),用于验证服务器端的用户输入(它不使用任何 .NET 内置验证器,因此 Page.Validate() 不适合我)。我在 page.IsPostback 事件上调用 Validate() 方法,并且该类执行没有任何问题

我的问题是,当验证失败(返回 false)时,我想阻止回发事件处理程序触发,但加载页面以及其中的所有控件和用户输入值。如果我这样做了,Response.End(),页面就会出现空白。我可以以编程方式指示页面转到上一页(回发前的原始表单),但它会丢失所有用户输入。

我想在文件后面的页面代码中创建一个全局布尔变量,并在执行任何回发方法之前检查该值,但这种方法偏离了我在类本身内提供所有功能的计划。页面对象被引用到 ServerSideValidator。

似乎我在 Page 类中遇到的所有回发相关属性/变量都是“只读”的,我无法分配值来控制/防止回发事件触发。

关于我如何做到这一点的任何想法?如果您需要更多详细信息,请告诉我

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    每次回发到同一个页面并在那里进行验证可能更容易,特别是在页面加载事件上。如果验证失败,您已经在正确的页面上,不必转到前一页。如果验证成功,那么您可以根据需要重定向到另一个页面,在这种情况下您可能不需要任何数据。

    编辑:这并不完全符合您的要求,但我感觉它会在适合现有 ASP.NET 验证设计的同时满足您的要求。见http://www.dotnetcurry.com/ShowArticle.aspx?ID=197http://www.4guysfromrolla.com/articles/073102-1.aspx

    基本上,您可以像现在一样创建一个自定义类,但继承自 BaseValidator。为了遵循您的设计,您可以创建一个名为 ValidationType 的枚举,它具有 Alphabetic、Alphanumeric 等。在您的自定义类中,创建一个名为 ValidationType 的属性,该属性使用 ValidationType 枚举。当然,您必须添加所有验证逻辑。然后在您的 aspx 页面中,您可以将自定义验证器添加到页面并设置 ValidationType="Alphabetic" 等,并提供完整的 IntelliSense 支持。

    由于您使用 BaseValidator,所有常规验证技术都可以使用,包括 Page.Validate()、Page.IsValid 等。如果您愿意,您甚至可以创建客户端验证 JavaScript。

    话虽如此,可能有人已经为你完成了大部分工作。

    【讨论】:

    • 它正在回发到同一页面。例如,我在 Default.aspx 页面上有 SAVE 按钮。当用户单击按钮时,在 Page_Load 我正在编码如果 Page.IsPostBack Then Dim ssv As New ServerSideValidator() ssv.AddValidation(txtName, 'alphabetic') ssv.AddValidation(txtDescription, 'alphanumeric') If Not ssv.Validate()然后''我在这里寻找一个代码块,它将绕过'' SAVE 按钮事件处理程序。我仍然希望页面完成''加载并保留所有用户输入 End If End If
    • 它正在回发到同一页面。例如,我在 Default.aspx 页面上有 SAVE 按钮。当用户单击按钮时,在 Page_Load 我正在编码
      If Page.IsPostBack Then
      Dim ssv As New ServerSideValidator()
      ssv.AddValidation(txtName, 'alphabetic')
      ssv .AddValidation(txtDescription, 'alphanumeric')
      If Not ssv.Validate() Then
      '' 我在这里寻找一个可以绕过
      '' SAVE 按钮事件处理程序的代码块。我仍然希望页面完成
      '' 加载并保留所有用户输入
      End If
      End If
    • 当我提到返回上一页时。我只是做了一个 javascript history.go(-1)。这样,它将 default.aspx 加载为新加载(缺少所有用户输入)
    • 感谢尼尔森的回复。
    • 我明白了......在这种情况下,当您进行验证时,您必须保存结果以供以后使用。你可以简单地在你的类中创建一个 bool 变量来保存它。通常,您使用内置验证器或创建自己的自定义验证器。该页面负责在页面加载后验证所有内容(或者您可以使用 Page.Validate() 强制执行)。之后你有 Page.IsValid 来检查它并停止“保存”按钮。在您的情况下,您将拥有 this.IsValid (或类似的)变量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-22
    • 1970-01-01
    • 2011-01-03
    • 2013-05-30
    • 1970-01-01
    • 2019-02-08
    相关资源
    最近更新 更多