【问题标题】:Reasons Why Custom Validator May Not Be Showing Error Msg?自定义验证器可能不显示错误消息的原因?
【发布时间】:2012-07-29 12:42:24
【问题描述】:

很遗憾,我无法向您展示代码,所以我只需要解释一下问题。

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

我设置了一个检查此问题的 OnServerValidate 方法,如果它失败了,我将 args.Valid 设置为 false。

但是我的错误信息从未出现。如果我查看 IE Developer Tool,我会看到带有硬编码消息的客户验证器,但它是隐藏的(可见性:隐藏)。

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

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

编辑

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

【问题讨论】:

  • “很遗憾,我不能给你看代码,所以我只能解释一下这个问题。”您能否举一个您可以展示的简化示例?
  • 您是否已单步执行代码并设置断点以单步执行验证例程?我还将验证页面在 page_load 事件期间是否被标记为无效。
  • @Tim - 是的,我通过调试器,看到它通过 onValidationServer 方法并设置为 false。在 btn 提交事件中有 Page.IsValid 检查页面是否有效。由于页面无效,它不会超过这一点。我可以放一个 Page.IsValid 并查看 page_load 中的内容
  • @MarkByers - 我想到了这一点,但不确定是否可以重新创建它,因为自定义验证器所在的页面中发生了很多事情,而且我没有编写此代码,所以不确定我是否能够重新创建场景。
  • 只是为了 yuks - 也许在验证器上明确设置你的前景色和背景色?

标签: c# asp.net .net validation


【解决方案1】:

同样的问题。我尝试了所有方法,更改验证器上的样式属性,使用 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",因为您不需要它。

【讨论】:

    【解决方案2】:

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

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

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

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

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

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

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

    【讨论】:

    • !important 在&lt;style&gt; 或&lt;link&gt;'d CSS 文件中不会覆盖内联样式属性
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多