我有一个使用.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?') />
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
感谢您的帮助。
答案 0 :(得分:8)
这似乎是一个非常普遍的问题。
解决方法:
首先验证页面,然后调用confirm
,如图here和here所示。
这样做有一个缺点,就是调用两次验证 - 一次在代码中,一次在提交onclick
中生成的代码中。
如何正常工作,即首先验证页面(只有一次),然后显示confirm
框,我还不知道。
编辑:Here是一个有用的建议:
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" />
答案 1 :(得分:2)
<asp:Button ID="btnSave" runat="server" OnClientClick="javascript:return ConfirmSubmit()" OnClick="btnSave_Click" Text="Save" />
//---javascript -----
function ConfirmSubmit()
{
Page_ClientValidate();
if(Page_IsValid) {
return confirm('Are you sure?');
}
return Page_IsValid;
}
答案 2 :(得分:1)
您是否可以使用EnableClientScript属性进行验证器控件,允许您在提交时在客户端执行验证,然后验证将会触发?
答案 3 :(得分:1)
问题是返回确认在验证器的javascript之前触发。这与生命周期和事物有关。
如果你想要肯定有这种行为,你需要做的是将所有验证器更改为自定义验证器,为自定义验证器推出自己的JS验证例程,然后在作为最终调用的验证例程结束。
如果 MAY 更改触发顺序,如果您将返回确认编码的JS添加到HIJAX方法中的按钮,之后将其分配给onClick事件该页面已完全加载到浏览器中 - 但我从未使用过该方法,因此请不要在那里引用。
答案 4 :(得分:1)
Validator由表单上的onsubmit处理程序触发。
如果您的覆盖form.onsubmit您将失去验证器触发,但您可以手动提供所需的JS。
答案 5 :(得分:1)
使用ASP.NET Control Toolkit的ValidatorCallout控件怎么样?来自:http://www.asp.net/AJAX/AjaxControlToolkit/Samples/ValidatorCallout/ValidatorCallout.aspx
ValidatorCallout是一个ASP.NET AJAX扩展程序,它增强了现有ASP.NET验证程序的功能。要使用此控件,请像往常一样添加输入字段和验证器控件。然后添加ValidatorCallout并设置其TargetControlID属性以引用验证器控件。
我没有使用过这个,但在我看来它会让你得到你想要的客户端验证。
答案 6 :(得分:1)
答案 7 :(得分:0)
您应该在客户端上验证页面。
function validate()
{
Page_ClientValidate();
if (Page_IsValid)
// do your processing here
return Page_IsValid;
}
可以在按钮的“onClientClick”事件上调用此方法,如果页面有效,则可以在代码隐藏中调用此方法,如果客户端验证成功,则执行处理。
因此,在按钮的点击事件中,您可以执行 -
protected void SubmitButton_Click(object sender, EventArgs e)
{
if (!this.isValid)
return;
// do the processing here
}