3

不幸的是,我无法向您展示代码,所以我只需要解释这个问题。

我在更新面板中有一个详细视图。我添加了一个自定义验证器,如果选择了单选按钮 A,它应该显示打开条件 TextBox A 中必须有一个值。

我设置了一个 OnServerValidate 方法来检查这个,如果它失败了,那么我将 args.Valid 设置为 false。

但是我的错误消息永远不会出现。如果我查看 IE 开发工具,我会看到带有硬编码消息的客户验证器,但它是隐藏的(可见性:隐藏)。

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

该页面确实未能通过验证,就好像满足该条件一样,我的页面将不会保存。它只是不会显示我在自定义验证器中设置的消息。

编辑

我还尝试Visible="true"在自定义验证器的 aspx 代码中进行操作,但它仍然不会显示错误消息,并且在开发人员工具包中将其显示为隐藏。

4

2 回答 2

0

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

最终,我通过添加带有错误消息的标签来完成最荒谬的解决方法:

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

这是所有验证器都应该包含的功能,但看起来 MS 把它塞进了这个。至少这可以可靠地工作。另外不要忘记设置Display="None"验证器,因为您不需要它。

于 2014-10-29T05:33:14.770 回答
-1

我自己遇到了一个类似的问题并找到了这个线程,就在我找到答案之前......不确定它是否仍然值得,但这就是我所做的。

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

My_Custom_Validator.Attributes.Add("class", "invalid")

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

.invalid {display:  block !important;  visibility:  visible !important;}

!important 将覆盖由 .NET 代码创建的内联 CSS。将其设置为显示:块;没有必要,但我把它放在以防万一。

这并不能回答您关于为什么可见性的问题:隐藏;内联 CSS 出现......这只是一种解决方法。

于 2012-08-28T19:30:24.187 回答