我在几个表单元素上使用内置的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");
答案 0 :(得分:4)
如果客户端验证失败,则没有回发,因此您有两个选择:
您可以在验证失败时执行Ajax调用,但这涉及客户端代码,因此它属于选项1。
答案 1 :(得分:2)
我假设您使用的是JQuery库,而您正在使用this answer中的javascript代码。
Jquery有一个parent()
和一个addClass()
函数。文档:parent,addClass。
以下是设置父元素的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更改,并保留客户端的所有内容。