C# 自定义验证器可能未显示错误消息的原因?

C# 自定义验证器可能未显示错误消息的原因?,c#,asp.net,.net,validation,C#,Asp.net,.net,Validation,不幸的是,我无法向您展示代码,因此我将不得不解释这个问题 我有一个更新面板中的详细视图。我添加了一个自定义验证器,如果选中单选按钮a,则该验证器应显示为打开条件文本框a中必须有一个值 我设置了一个OnServerValidate方法,该方法对此进行了检查,如果失败,则将args.Valid设置为false 但是,我的错误消息从未出现。如果我通过IE开发者工具查看,我会看到我的客户验证程序带有硬编码的消息,但它是隐藏的(可见性:隐藏) 我试图找到customvalidator并强制显示可见性,甚至

不幸的是,我无法向您展示代码,因此我将不得不解释这个问题

我有一个更新面板中的详细视图。我添加了一个自定义验证器,如果选中单选按钮a,则该验证器应显示为打开条件文本框a中必须有一个值

我设置了一个OnServerValidate方法,该方法对此进行了检查,如果失败,则将args.Valid设置为false

但是,我的错误消息从未出现。如果我通过IE开发者工具查看,我会看到我的客户验证程序带有硬编码的消息,但它是隐藏的(可见性:隐藏)

我试图找到customvalidator并强制显示可见性,甚至尝试通过customvalidator.Style.remove(“可见性”)将其删除,但没有任何效果。信息总是隐藏的

页面验证失败,就好像满足了该条件一样。我的页面将不会保存。它不会显示我在自定义验证器中设置的消息

编辑


我还尝试在自定义验证器的aspx代码中执行
Visible=“true”
,但它仍然不会显示错误消息,而在开发人员工具包中显示为隐藏。

我自己也遇到了类似的问题,在找到答案之前发现了这个线程……不确定它是否仍然值得,但我做了如下

1) 我添加了以下代码(VB.net代码,但您应该能够将其移植到C#):

2) 我创建了一个CSS无效类规则:

.invalid {display:  block !important;  visibility:  visible !important;}
这个!重要信息将覆盖由.NET代码创建的内联CSS。将其设置为显示:块;没有必要,但我只是以防万一


这并不能回答你的问题,为什么可见性:隐藏;内联CSS出现了……这只是一个解决办法。

这里也有同样的问题。我尝试了一切,更改了验证器上的style属性,使用Javascript更改了样式,Jquery等等。没有任何效果,它的样式总是“可见性:隐藏”

最后,我做了一个最荒谬的变通方法,只添加了一个带有错误消息的标签:

<asp:Label ID="ErrorLabel" runat="server" Visible="False" CssClass="validator-red">
    Error message here
</asp:Label>

这是所有验证器都应该包含的功能,但看起来微软在这个验证器上塞满了它。至少这是可靠的。另外,不要忘记在验证器上设置
Display=“None”
,因为您不需要这样做。

“很遗憾,我不能向您显示代码,所以我只需要解释一下问题。”您可以做一个简单的示例来演示吗?您是否已经完成了代码并设置了断点以进入验证例程?我还要验证页面在page_load事件期间是否被标记为无效。@Tim-是的,我检查了调试器,看到它通过onValidationServer方法并设置为false。在btn提交事件中,有Page.IsValid检查页面是否有效。由于页面无效,因此无法通过此点。我可以放一个页面。如果有效,请查看页面中的内容_load@MarkByers-我想到了这一点,但不确定我是否可以重新创建它,因为在自定义验证器所在的页面上有太多的内容,最重要的是我没有编写此代码,所以不确定我是否能够重新创建该场景。仅针对yuks-可能显式设置前景和验证器上的背景色?
!重要信息
'd CSS文件中,将不会覆盖内嵌样式属性
<asp:Label ID="ErrorLabel" runat="server" Visible="False" CssClass="validator-red">
    Error message here
</asp:Label>
protected void Validator_ServerValidate(object source, ServerValidateEventArgs args) {
    // Validation code, set args.IsValid here.

    ErrorLabel.Visible = !args.IsValid;
}