2016-08-11 62 views
1

我有有asp:RegularExpressionValidator连接到它作为这样试图在ASP.net网页表单

<div class="form-group col-sm-6 <%= (revAlertValue.IsValid == false ? "has-error" : "") %>"> 
<label for="AlertValue" class="control-label col-sm-4">Alert Value</label> 
<div class="col-sm-4 input-group"> 
    <span class="input-group-btn"> 
     <asp:Button ID="btnMediumValue" CssClass="btn btn-warning" runat="server" Text="Low" OnClientClick="btnMediumValue_Click" OnClick="btnMediumValue_Click" /> 
    </span> 
    <asp:TextBox CssClass="form-control text-center" CausesValidation="true" ID="tbAlertValue" runat="server" MaxLength="4" /> 
    <asp:RegularExpressionValidator ID="revAlertValue" runat="server" 
     ControlToValidate="tbAlertValue" ErrorMessage="" 
     ValidationExpression="^[1-9]\d*$" /> 
    <asp:RequiredFieldValidator ID="rfvAlertValue" runat="server" ControlToValidate="tbAlertValue" /> 
    <span class="input-group-btn"> 
     <asp:Button ID="btnHighValue" CssClass="btn btn-danger" runat="server" Text="High" OnClientClick="btnHighValue_Click" OnClick="btnHighValue_Click" /> 
    </span> 
</div> 

基本上,我试图将has-error类适用于文本框应用引导我的风格如果正则表达式验证程序无效,则为form-group。但是,当我去测试并输入将会失败正则表达式验证器的文本时,该类将不会被应用。

我试着写在其他方面的表现:

<%= (revResendEvery.IsValid == false) ? "has-error" : "" %> 
<%= (revAlertValue.IsValid == false ? "has-error" : "") %> 

我想也许它必须被触发按下提交按钮时,以上代码必须被添加到.aspx.cs处理提交后的类添加被按下,但是这也不能解决问题。

+0

服务器端或客户端? – Bert

+0

我宁愿让它工作在客户端。 – gh0st

回答

1

为了做到这一点客户端,你需要挖掘由ASP.NET呈现的客户端代码。以下是您可能在页面上包含的一些脚本示例。

(function() { 
    var originalRegularExpressionValidator = RegularExpressionValidatorEvaluateIsValid; 
    RegularExpressionValidatorEvaluateIsValid = function (val) { 
     var originalValidationResult = originalRegularExpressionValidator(val); 

     if (!originalValidationResult) { 
      var formGroup = $("#" + val.controltovalidate).closest(".form-group"); 
      formGroup.addClass("has-error"); 
     } 
     return originalValidationResult; 
    } 
})(); 

这当然,假定您有jQuery的页面(为closestaddClass方法),但你可以替换成任何你想要的。

此外,您可能希望考虑重写ASP.NET呈现的Page_ClientValidate函数。有关StackOverflow的许多问题解决了如何做到这一点。