ASP.NET验证控件和Javascript确认框

时间:2008-09-26 14:42:03

标签: .net asp.net javascript vb.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?') />

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

感谢您的帮助。

8 个答案:

答案 0 :(得分:8)

这似乎是一个非常普遍的问题。

解决方法:

首先验证页面,然后调用confirm,如图herehere所示。 这样做有一个缺点,就是调用两次验证 - 一次在代码中,一次在提交onclick中生成的代码中。

如何正常工作,即首先验证页面(只有一次),然后显示confirm框,我还不知道。

编辑:Here是一个有用的建议:

  

ASP.NET在幕后做了什么   当存在验证控件时,添加   一个自动生成的onClick事件   每个按钮。这个OnClick事件会   取代自定义OnClick事件。所以   克服了这一点,我做了以下几点:

     
      
  1. 添加CausesValidation = False
  2.   
  3. 将Validate()和IsValid代码添加到onClick事件中   在页面后面模拟现在   缺少自动生成的验证码   按钮后面。
  4.   

编辑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
}