【问题标题】:Suppressing .net's updatepanel submit event handler抑制 .net 的 updatepanel 提交事件处理程序
【发布时间】:2011-02-14 14:58:29
【问题描述】:

我正在对我的表单执行一些自定义 js 验证,由提交表单触发

    $("form").submit(function (e) {
        var validates = true;
        // validation code goes in here
        if (!validates) {
            e.preventDefault();
            e.stopImmediatePropagation();
            return false;
        }
    })

我所包含的用于停止提交事件的所有行都不会阻止 .NET 控件回发。有什么方法(使用 js 或在 updatepanel 控件中设置属性)停止回发吗?

【问题讨论】:

  • 为什么不将更新面板模式设置为条件?还是我错过了什么? (也许详细说明您遇到的原始问题,因为我认为 this 不是一个好的方向)。
  • 刚刚试过但没有用。我在这个问题中添加了更多细节 - 我是一名前端开发人员,所以真的不知道要提供哪些关于 .NET 的信息
  • 什么版本的 .NET? 3.5? 4.0?
  • visual studio 2010,所以大概是最新的 .net 版本

标签: javascript .net ajax events updatepanel


【解决方案1】:

我发现可靠的方法是使用 Sys.WebForms.PageRequestManager 类:

Sys.WebForms.PageRequestManager.getInstance()
    .add_initializeRequest(function (sender, args) {
        if (!function_to_check_form_is_valid(sender, args))
            args.set_cancel(true);
        }
   });

【讨论】:

    【解决方案2】:

    最简单的方法是捕获客户端点击提交表单的内容。

    【讨论】:

    • 不幸的是,这对键盘用户不起作用。我想我可以做一个组合的点击和键位处理程序
    • 刚刚意识到这样做的一个问题是它取决于知道哪个元素提交表单,而我的验证代码不一定总是可以访问这些信息
    • 通常是键盘表单post,通过“点击”按钮提交。您怎么不知道提交表单的内容是什么?
    • 我刚刚检查了使用键盘提交表单时是否触发了点击事件(聚焦任何元素并点击“回车”),并且没有触发点击事件。
    【解决方案3】:

    您是否有任何理由进行客户端验证而不是服务器端?如果是我,我会编写一个自定义的 asp.net 验证器,然后在发送更新之前检查该验证器。更新面板仍会回发,但只要您检查验证器,就不会创建任何内容。

    【讨论】:

    • 我们被要求进行客户端验证,不幸的是 .NET 客户端验证的可定制性不足以满足我们的需求。不过,我们仍在进行服务器端验证
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-01
    • 2011-08-12
    • 1970-01-01
    • 1970-01-01
    • 2013-09-24
    • 2011-10-22
    相关资源
    最近更新 更多