对表单提交禁用ASP.NET服务器验证

Disable ASP.NET Server Validation on form submit

本文关键字:NET 服务器 验证 ASP 表单提交      更新时间:2023-09-26

我有一个带有OnClientScript属性的ASP.NET链接按钮,用于打开一个弹出窗口,用户可以在其中搜索一些值,然后这些值应该被转移到打开的ASP.NET页面。为了超过弹出窗口到打开页面的值,我手动强制执行一个post-back 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();

这将导致使用LinkButton在页面上回发。作为回发,还会评估所有验证器,即使用户没有应用保存按钮,页面也可能会无效。因此,我想找到一种方法来防止这种验证,以防回发不是由ASP.NET控件中的OnClick事件引起的,而是由类似上述JavaScript的东西引起的。

在上面链接按钮的定义中,设置CausesValidation="False"没有帮助,因为回发不是由链接按钮本身引起的(只设置了OnClientClick属性,回发/表单提交是由弹出窗口上的某些javascript引起的)

因此,我真正需要的是一种方法,告诉ASP.NET不要执行任何验证,以防我的回发是由上面的javascript表单submit而不是ASP.NET控件调用的。

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

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