我有一个ASP.NET链接按钮,其OnClientScript属性设置为打开弹出窗口,用户可以在其中搜索某些值,然后将这些值接管到打开的ASP.NET页面。为了超越弹出窗口中的值到开始页面,我手动强制回传JavaScript:
window.opener.document.forms[0].submit();
这在弹出窗口上的工作流程完成后执行
这将打开弹出窗口的页面将再次加载(使用IsPostBack = true执行Page_Load,并通过SessionState变量取代弹出窗口中的值)。
然而问题是,像这样强制回传JavaScript也会强制在开始页面上进行验证。对于使用OnClick - 事件执行回发的按钮,您只需设置
即可CausesValidation = false
并且此回发禁用所有验证。我发现绕过这个问题的唯一方法是手动禁用Page_Load中某个特定工作流的问题验证器,然后再重新启用它们。然而,这是非常难看的,因为页面上有许多验证器,并且何时启用/禁用每个验证器的逻辑并不简单。
是否有一种简单的方法可以仅为一次回复禁用服务器端验证(无需手动禁用验证器)。我想要的是像
CausesValidation = false
可以在服务器端的Page_Load中设置。我不认为有一种方法可以禁用JavaScript的服务器验证,是吗?
编辑:
为了使这个(希望)更清楚,我在我的aspx页面上有一个Linkbutton:
<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。),然后在下一个回发中重新启用它们,但如上所述,验证器逻辑非常复杂,我想要阻止重新运行验证器的所有初始化逻辑。
答案 0 :(得分:0)
ASP.NET中的所有验证程序都有EnableClientScript
属性,您可以根据需要将其设置为true或false。如果将其设置为false,则可以使用javascript执行回发,然后在后面的代码中触发验证。