2016-08-11 41 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的許多問題解決了如何做到這一點。

相關問題