【发布时间】: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();
这会导致带有 LinkButton 的页面回发。作为回发,所有验证器也会被评估,即使用户没有应用保存按钮,页面也可能会失效。所以我想找到一种方法来防止这种验证,以防回发不是由来自 ASP.NET 控件的 OnClick 事件引起的,而是由上述 JavaScript 引起的。
在上面的 Linkbutton 的定义中,设置 CausesValidation="False" 没有帮助,因为回发不是由 Linkbutton 本身引起的(仅设置了 OnClientClick 属性并且回发/表单提交是由一些 javascript 引起的弹出)
所以我真正需要的是一种方法告诉 ASP.NET 不要执行任何验证,以防我的回发被上述 javascript 表单提交而不是 ASP.NET 控件调用。
要做到这一点,最困难的方法是手动禁用所有验证器(通过 Page.Validators 或 smth.),然后在下一次回发时再次重新启用它们,但如前所述,验证器逻辑非常复杂,我希望防止重新运行验证器的所有初始化逻辑。
【问题讨论】:
标签: javascript asp.net validation webforms postback