2011-10-25 57 views
1

是否有可能使用JavaScript,以便在asp.net验证器失败时(例如输入不匹配正则表达式),文本框边框和背景颜色会更改为红色阴影。艾弗以前见过这个,但我忘了在哪里。在验证失败时更改文本框边框和背景

有人可以请我链接到这样一个活的例子吗?

而我可以做到这一点?

感谢

编辑:

使用此解决方案:

validateField = function(sender, args){   
    //do your validation logic   
    if (!args.IsValid){ 
     var ctrl = $("#" + sender.controltovalidate); 
     if (ctrl){ 
      ctrl.css({ "background-color" : "#990000", "border" : "1px solid #993300" }); 
     } 
    } 
    return args.IsValid; 
} 

如果我在哪里可以使用普通exressions,这是做了正确的方法是什么?

validateField = function(sender, args){   
    var regEx=(some regex forumla) 
    if (sender.value.search(regEx)==-1)   
     var ctrl = $("#" + sender.controltovalidate); 
     if (ctrl){ 
      ctrl.css({ "background-color" : "#990000", "border" : "1px solid #993300" }); 
     } 
    } 
    else 
     { 
      return args.IsValid; 
     } 
} 

对不起,由于我缺乏知识,从未使用过JavaScript。另外,什么是:

return args.IsValid; 

最后呢?

回答

0

我做了这样的事情

Private Sub HighlightInvalidFields() 

    For Each validator As IValidator In Page.Validators 
     If TypeOf validator Is BaseValidator Then 
      If CType(validator, BaseValidator).IsValid = False Then 

       Dim controlId As String = CType(validator, BaseValidator).ControlToValidate 
       Dim control As WebControl = TryCast(Me.FindControlRecursive(controlId), WebControl) 

       If control IsNot Nothing Then 
        control.Style.Add("background-color", "#B85449") 
       End If 

      End If 
     End If 
    Next 

End Sub 

我把它从page_prerender

Private Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRender 
    If Page.IsPostBack Then HighlightInvalidFields() 
End Sub 
+0

这可能是有益的注意,我有一个基类,我继承System.Web.UI.Page,所以这段代码是不可复制在每个页面上,我只是让每个页面都从基本页面继承。 – jabroni

+0

OP指定的客户端。 –

1

您可以使用一个CustomValidator,如果验证失败,您可以更改的边框和背景颜色客户端验证功能:

验证功能:

validateField = function(sender, args){   
    //do your validation logic   
    if (!args.IsValid){ 
     var ctrl = $("#" + sender.controltovalidate); 
     if (ctrl){ 
      ctrl.css({ "background-color" : "#990000", "border" : "1px solid #993300" }); 
     } 
    } 
    return args.IsValid; 
} 

标记:

<asp:TextBox ID="TextBox1" runat="server" /> 
<asp:CustomValidator ID="CustomValidator1" runat="server" EnableClientScript="true" 
    ErrorMessage="Required" 
    ClientValidationFunction="validateField" 
    ControlToValidate="TextBox1" 
    Display="Dynamic"> 
</asp:CustomValidator> 
+0

谢谢,我喜欢这个解决方案。如果我使用javascript来验证,我是否也需要编写一个c#验证器在服务器端使用? – TheGateKeeper

+0

您可以使用“CustomValidator”控件指定服务器端验证功能。 –

+0

请检查原始帖子 – TheGateKeeper

0
public class ChangeColorPage : Page { 
public Label lblZip; 
public RegularExpressionValidator valZip; 

protected override void OnLoad(EventArgs e) {  
    Page.Validate();  
    lblZip.ForeColor = valZip.IsValid? Color.Black : Color.Red; 
    }    
} 


<asp:Label id=lblZip runat=server Text="Zip Code:"/> 
<asp:TextBox id=txtZip runat=server OnChange="txtZipOnChange();" /></asp:TextBox><br> 
<asp:RegularExpressionValidator id=valZip runat=server ControlToValidate=txtZip ErrorMessage="Invalid Zip Code" ValidationExpression="[0-9]{5}" /><br> 

<script language=javascript> 
function txtZipOnChange() { 
    // Do nothing if client validation is not active 
    if (typeof(Page_Validators) == "undefined") return; 
    // Change the color of the label 
    lblZip.style.color = valZip.isvalid ? "Black" : "Red"; 
} 
</script> 

http://msdn.microsoft.com/en-us/library/aa479045.aspx