【问题标题】:Server side CustomValidator happening too late in .Net Wizard服务器端 CustomValidator 在 .Net 向导中发生得太晚了
【发布时间】:2010-11-16 15:48:41
【问题描述】:

我的数据收集向导有问题。

我的向导有许多客户端验证器(正则表达式、必填字段等),它们都可以正常工作。

我刚刚向其中一个控件添加了一个 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 弹出窗口,它基本上说“我无效”,并且它会在屏幕移动后出现。

任何建议都非常感谢。

【问题讨论】:

    标签: .net validation wizard customvalidator


    【解决方案1】:

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

    我为 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;
            }
        }
    

    我的服务器端验证器现在被调用了两次,一次被原始向导代码调用,然后被忽略,第二次被这个方法调用,然后阻止向导继续下一步....

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

    【讨论】:

    • “我会更新的……如果我弄清楚到底发生了什么。”请做!
    【解决方案2】:

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

    编辑

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

    【讨论】:

    • 您好,CustomValidator 控件已添加到 init 方法中的控件集合中。同时添加了一个必填字段验证器,它工作正常。我认为它必须是服务器端与客户端的事情......
    • 我没有看到任何客户端验证设置?
    • 抱歉,我没有说清楚 - 没有为 mustUploadAnImageValidator 控件设置客户端验证,但 radioButtonList 上有一个 requiredFieldValidator。这个验证器工作正常,而 CustomValidator 不是。据我了解, requiredFieldValidator 会为您生成一些客户端脚本?
    • 您的意思是自定义验证器吗?自定义验证器不会为您添加客户端脚本 - 您必须自己连接。
    • 您好,我知道您需要为自定义验证器添加自己的客户端脚本。不过我不想要这个。我只对服务器端验证感兴趣。我只是指出在 InitControl 方法中同时设置了一个 requiredFieldValidator ,它工作正常。你说在每次回发后检查它是否被添加。因此,由于它是与工作验证器同时添加的,我认为这不是问题。
    猜你喜欢
    • 2012-05-17
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 2020-01-06
    • 2011-05-28
    • 1970-01-01
    相关资源
    最近更新 更多