【问题标题】:Disable ASP.NET Server Validation on form submit在表单提交时禁用 ASP.NET 服务器验证
【发布时间】:2015-01-01 07:48:57
【问题描述】:

我有一个 ASP.NET 链接按钮,其 OnClientScript 属性设置为打开一个弹出窗口,用户可以在其中搜索一些值,然后这些值应该被接管到打开的 ASP.NET 页面。为了超越从弹出窗口到打开页面的值,我手动强制回发 vie JavaScript:

window.opener.document.forms[0].submit();

这是在弹出窗口上的工作流完成后执行的

这是因为打开弹出窗口的页面将再次加载(Page_Load 使用 IsPostBack = true 执行,并且弹出窗口中的值通过 SessionState 变量被超越)。

但是问题在于,像这样强制从 JavaScript 回发也会强制对打开页面进行验证。对于使用 OnClick - 事件执行回发的按钮,您可以简单地设置

CausesValidation = false

并且此回发的所有验证都被禁用。我发现绕过这个问题的唯一方法是手动禁用 Page_Load 中某个特定工作流程的所有有问题的验证器,然后稍后重新启用它们。然而,这很丑陋,因为页面上有很多验证器,并且何时启用/禁用每个验证器的逻辑并不简单。

是否有一种简单的方法可以仅对一次回发禁用服务器端验证(无需手动禁用验证器)。我想要的是类似的东西

CausesValidation = false

可以在服务器端的Page_Load中设置。我认为没有办法通过 JavaScript 禁用服务器验证,是吗?

编辑:

所以为了让这个(希望)更清楚,我在我的 aspx 页面上有一个链接按钮,如下所示:

 <asp:LinkButton ID="LB1" runat="server" CausesValidation="False"
  OnClientClick="window.open(xyz.aspx?...)"

在某些用户工作流之后的 xzy.aspx 上执行以下行:

window.opener.document.forms[0].submit();

这会导致带有 LinkBut​​ton 的页面回发。作为回发,所有验证器也会被评估,即使用户没有应用保存按钮,页面也可能会失效。所以我想找到一种方法来防止这种验证,以防回发不是由来自 ASP.NET 控件的 OnClick 事件引起的,而是由上述 JavaScript 引起的。

在上面的 Linkbutton 的定义中,设置 CausesValidation="False" 没有帮助,因为回发不是由 Linkbutton 本身引起的(仅设置了 OnClientClick 属性并且回发/表单提交是由一些 javascript 引起的弹出)

所以我真正需要的是一种方法告诉 ASP.NET 不要执行任何验证,以防我的回发被上述 javascript 表单提交而不是 ASP.NET 控件调用。

要做到这一点,最困难的方法是手动禁用所有验证器(通过 Page.Validators 或 smth.),然后在下一次回发时再次重新启用它们,但如前所述,验证器逻辑非常复杂,我希望防止重新运行验证器的所有初始化逻辑。

【问题讨论】:

    标签: javascript asp.net validation webforms postback


    【解决方案1】:

    ASP.NET 中的所有验证器都有一个 EnableClientScript 属性,您可以根据需要将其设置为 true 或 false。如果您将其设置为 false,您将能够使用 javascript 执行回发,然后在您的代码中触发验证。

    【讨论】:

    • 这不起作用,验证仍在执行。我想要的是一种方法来防止通过 javascript 的表单提交触发的回发上的每个验证。 (独立于任何验证器)
    • 您能附上代码以便我们提供帮助吗?现在没什么好说的了。
    猜你喜欢
    • 2016-09-25
    • 2019-06-30
    • 2012-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多