3 .net javascript vb.net asp.net winforms
我有一个使用.NET服务器端输入验证控件的页面.此页面还有一个javascript确认框,在提交表单时触发.目前,当选择"提交"按钮时,将显示"javascript确认"框,并且一旦确认,将触发ASP.NET服务器端验证控件.我想在显示javascript确认框之前触发服务器端验证控件.
如何实现这一目标?我已经在下面列出了我当前代码的示例.
sample.aspx
<asp:textbox id=foo runat=server />
<asp:requiredfieldvalidator id=val runat=server controltovalidate=foo />
<asp:button id=submit runat=server onClientClick=return confirm('Confirm this submission?') />
Run Code Online (Sandbox Code Playgroud)
sample.aspx.vb
Sub Page_Load()
If Page.IsPostback() Then
Page.Validate()
If Page.IsValid Then
'process page here'
End If
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助.
这似乎是一个非常普遍的问题.
解决方法:
首先验证页面,然后调用confirm,如此处和此处所示.这确实有两次调用验证的缺点 - 一次在代码中,一次在提交中生成的代码中onclick.
如何使这项工作正常,即首先验证页面(只有一次),然后显示confirm框,我还不知道.
编辑:这是一个有用的建议:
当验证控件存在时,ASP.NET在幕后做的是为每个按钮添加一个自动生成的onClick事件.此OnClick事件将取代自定义OnClick事件.所以要克服这个问题,我做了以下几点:
- 添加CausesValidation = False
- 将Validate()和IsValid代码添加到页面后面的onClick事件,以模拟按钮后面现在缺少的自动生成的验证代码.
编辑2:一个完整的例子
<asp:Button ID="btnSubmit" runat="server" Text="Submit" OnClientClick="if (Page_ClientValidate()){ return confirm('Do you want to submit this page?')}" CausesValidation="false" />
Run Code Online (Sandbox Code Playgroud)