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

ASP.NET验证控件和Javascript确认框,.net,asp.net,javascript,vb.net,winforms,.net,Asp.net,Javascript,Vb.net,Winforms,我有一个使用.NET服务器端输入验证控件的页面。此页面还有一个javascript确认框,在提交表单时触发。当前,当选择Submit按钮时,会出现javascript确认框,一旦确认,就会触发ASP.NET服务器端验证控件。我想在显示javascript确认框之前启动服务器端验证控件 如何做到这一点?我在下面附上了我当前代码的一个示例 sample.aspx <asp:textbox id=foo runat=server /> <asp:requiredfieldvalida

我有一个使用.NET服务器端输入验证控件的页面。此页面还有一个javascript确认框,在提交表单时触发。当前,当选择Submit按钮时,会出现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?') />

谢谢您的帮助。

您不能将EnableClientScript属性用于validator控件,从而允许您在提交时在客户端执行验证。然后将触发验证

问题是返回确认在验证程序的javascript之前触发。这一切都与生命周期有关

如果您确实希望有这样的行为,那么您需要做的是将所有验证器更改为自定义验证器,为自定义验证器推出自己的JS验证例程,然后在验证例程结束时调用confirm作为最终调用


如果可以更改触发顺序,如果您将返回确认编码的JS添加到HIJAX方法中的按钮,在该方法中,页面完全加载到浏览器后,它被分配给onClick事件——但我从未将该方法用于该功能,所以不要在这里引用我的话。

验证程序是由表单上的onsubmit处理程序启动的


如果覆盖form.onsubmit,您将失去验证程序启动,尽管您可以手动提供所需的JS。

使用ASP.NET控件工具包的validator Callout控件如何?发件人:

ValidatorCallout是一个ASP.NET AJAX扩展程序,它增强了现有ASP.NET验证程序的功能。要使用此控件,请像平常一样添加输入字段和验证程序控件。然后添加ValidatorCallout并将其TargetControlID属性设置为引用validator控件


我没有使用过这个,但在我看来,它可以为您提供所需的客户端验证。

这似乎是一个非常常见的问题

解决办法:

首先验证页面,然后调用
确认
,如图和所示。 这确实有两次调用验证的缺点—一次在代码中调用,一次在提交
onclick
中的生成代码中调用

如何使其正常工作,即首先验证页面(并且仅验证一次),然后显示
确认
框,我还不知道

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

ASP.NET在幕后做什么 如果存在验证控件,则为“添加” 为的自动生成的onClick事件 每个按钮。此OnClick事件将 替换自定义OnClick事件。所以 克服这一点,我做了以下工作:

  • add CausesValidation=False
  • 向onClick事件添加了Validate()和IsValid代码 在页面后面模拟“现在” 缺少自动生成的验证代码 在按钮后面
  • 编辑2:一个完整的示例

    <asp:Button ID="btnSubmit" runat="server" Text="Submit" OnClientClick="if (Page_ClientValidate()){ return confirm('Do you want to submit this page?')}" CausesValidation="false" />
    

    您应该在客户端本身上验证页面

    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
    }
    
    验证检查后代码隐藏中的确认框
    
    //---javascript-----
    函数ConfirmSubmit()
    {
    Page_ClientValidate();
    如果(第页有效){
    返回确认(“您确定吗?”);
    }
    返回页面无效;
    }
    
    +1但您的标题令人困惑。确认框不在代码隐藏中。
    protected void SubmitButton_Click(object sender, EventArgs e)    
    {    
        if (!this.isValid)
            return;
    
        // do the processing here
    }
    
         <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;
    }