【问题标题】:Problem with postbacks and validators回发和验证器的问题
【发布时间】:2011-01-18 11:27:59
【问题描述】:

我在一些表单元素上使用了内置的 ASP 验证器。它们工作正常 - 如果我单击提交按钮(一个按钮),验证会在没有回发的情况下发生,并且错误会显示在 ValidationSummary 中。发生这种情况时,我还想在代码隐藏中调用一个方法来更改元素的 CSS,将它们的背景颜色切换为红色以反映错误。我尝试在提交按钮中同时使用 OnClick 和 OnClientClick 调用此方法,但似乎两个参数都不会触发该方法 - 客户端验证始终具有优先权,并且永远不会发生回发。谁能赐教?

编辑#1

使用 orandovs 链接可以改变元素本身,但是它的父元素呢?

例如,在 C# 中我正在做:

foreach (BaseValidator validator in Page.Validators)
{
    Panel panel = validator.Parent as Panel;

    if (!validator.IsValid)
        panel.CssClass = "error";
    else
        panel.CssClass = "normal";
}

有没有办法使用 JavaScript 获取父控件(它们都是一致的面板,所以我知道 CssClass 会存在)?比如:

 $("#" + Page_Validators[i].controltovalidate.parent).CssClass("error");

【问题讨论】:

标签: asp.net validation postback


【解决方案1】:

如果客户端验证失败,则没有回发,因此您有两种选择:

  1. 编写客户端javascript来做你想做的事。
  2. 将所有验证器设置为仅在服务器上验证(设置 EnableClientScript = "false")(不推荐)

您可以在验证失败时进行 Ajax 调用,但这涉及客户端代码,因此它属于选项 1。

【讨论】:

  • 谢谢,我正在尝试使用 orandov 的链接的方法 #1,但遇到了问题...编辑原始问题以反映。
【解决方案2】:

为什么不修改对象的 CssClass 属性或使用 Response.Write() 编写一些 javascript 代码

【讨论】:

    【解决方案3】:

    客户端验证将阻止回发。有几种方法可以做到这一点。如果您真的希望进行回发,您可以将其放在更新面板中并强制进行部分回发,这会触发您的代码。您还可以在 javascript 中执行 CSS 更改,并将所有内容保留在客户端。

    【讨论】:

      【解决方案4】:

      我假设您使用的是 JQuery 库,并且您使用的是来自 this answer 的 javascript 代码。

      Jquery 有一个parent() 和一个addClass() 函数。文档:parentaddClass

      这里是修改后的代码来设置父元素的css类:

      if (!Page_Validators[i].isvalid) {
         $("#" + Page_Validators[i].controltovalidate).parent().addClass("error");
      }
      else{
          //Make sure you remove the error class if the error has been fixed
          $("#" + Page_Validators[i].controltovalidate).parent().removeClass("error");
      }
      

      【讨论】:

        猜你喜欢
        • 2016-02-09
        • 2011-05-07
        • 1970-01-01
        • 1970-01-01
        • 2011-06-14
        • 2013-04-26
        • 1970-01-01
        • 2011-04-23
        • 2011-08-02
        相关资源
        最近更新 更多