回发和验证器的问题

时间:2010-02-18 18:54:45

标签: asp.net validation postback

我在几个表单元素上使用内置的ASP验证器。它们工作正常 - 如果我单击提交按钮(按钮),验证将在没有回发的情况下发生,并且错误将显示在ValidationSummary中。当发生这种情况时,我还想在codebehind中调用一个方法来改变元素的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获取父控件(这些都是一致的Panel,所以我知道CssClass会存在)?类似的东西:

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

4 个答案:

答案 0 :(得分:4)

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

  1. 编写客户端javascript以执行您想要执行的操作。
  2. 设置所有验证器仅在服务器上验证(设置EnableClientScript =“false”)(不推荐)
  3. 您可以在验证失败时执行Ajax调用,但这涉及客户端代码,因此它属于选项1。

答案 1 :(得分:2)

我假设您使用的是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");
}

答案 2 :(得分:1)

为什么不修改对象的CssClass属性或使用Response.Write()

编写一些javascript代码

答案 3 :(得分:1)

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