服务器端CustomValidator在.Net向导中发生得太晚

服务器端CustomValidator在.Net向导中发生得太晚,.net,validation,wizard,customvalidator,.net,Validation,Wizard,Customvalidator,我的数据收集向导有问题 我的向导有许多客户端验证器(regex、required字段等),它们都可以正常工作 我刚刚在其中一个控件中添加了一个CustomValidator,它调用一些服务器端代码。(不幸的是,它必须是服务器端) 我的问题是,此代码似乎是在向导进入下一步(或正在移动)后调用的 因此,它为验证返回false这一事实对我来说用处不大 我将动态添加验证器,作为InitControl方法的一部分,如下所示: mustUploadAnImageValidator = new CustomV

我的数据收集向导有问题

我的向导有许多客户端验证器(regex、required字段等),它们都可以正常工作

我刚刚在其中一个控件中添加了一个CustomValidator,它调用一些服务器端代码。(不幸的是,它必须是服务器端)

我的问题是,此代码似乎是在向导进入下一步(或正在移动)后调用的

因此,它为验证返回false这一事实对我来说用处不大

我将动态添加验证器,作为InitControl方法的一部分,如下所示:

mustUploadAnImageValidator = new CustomValidator();
mustUploadAnImageValidator.ControlToValidate = radioButtonList.ID;
mustUploadAnImageValidator.ValidationGroup = "wizardGroup";
mustUploadAnImageValidator.ErrorMessage = "You must select a valid gallery image to use";
mustUploadAnImageValidator.Display = ValidatorDisplay.Static;
mustUploadAnImageValidator.ServerValidate += 
    new ServerValidateEventHandler(mustUploadAnImageValidator_ServerValidate);
mustUploadAnImageValidator.CssClass = "galleryValidationMessageTop";
这适用于所有其他验证程序,但我不明白为什么在服务器验证返回之前向导会继续运行

我添加了一个javaScript弹出窗口,从服务器端方法调用,它基本上说是“我无效”&这会在屏幕移动之后出现


非常感谢您的建议。

请确保在每次回发时都在Init事件中添加控件

编辑


您还必须手动连接自定义验证器的客户端验证。

我已经设法解决了这个问题

我已经为NextButtonClick&PreviousButtonClick添加了一个事件处理程序,它只是再次调用页面验证

protected virtual void DataCollectionWizard_PreviousButtonClick(object sender, WizardNavigationEventArgs e)
    {
        //manually validate the page, as the automatic validation seems to ignore CustomValidators
        Page.Validate("wizardGroup");

        if (!Page.IsValid)
        {
            e.Cancel = true;
        }
    }
我的服务器端验证程序现在被调用了两次,一次是由原始向导代码调用,然后被忽略,第二次是由此方法调用,然后停止向导进入下一步


这不是世界上最好的解决办法,但至少它起作用了!如果我弄清楚到底发生了什么,我会更新这篇文章。

Hi,CustomValidator控件被添加到init方法中的controls集合中。同时添加了一个必需的字段验证器&它工作正常。我想这一定是服务器端对客户端的事情…我没有看到任何客户端验证设置?对不起,我没有说清楚-mustUploadAnImageValidator控件没有设置客户端验证,但是radioButtonList上有一个requiredFieldValidator。此验证器工作正常,而CustomValidator工作正常。据我所知,requiredFieldValidator为您生成了一些客户端脚本?您是指自定义验证器吗?自定义验证器不会为您添加客户端脚本-您必须自己连接它。您好,我知道您需要为自定义验证器添加自己的客户端脚本。但我不想要这个。我只对服务器端验证感兴趣。我只是指出在InitControl方法中同时设置了一个requiredFieldValidator,它运行良好。你说每次回发后都要检查它是否被添加。因此,由于它是作为一个有效的验证器同时添加的,我认为这不是问题所在。“我会更新…如果我知道到底发生了什么。”请这样做!