我有一个文本框,其上附有asp:RegularExpressionValidator
<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 :(得分: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(对于closest
和addClass
方法),但您可以将其替换为您想要的任何内容。
此外,您可能希望查看覆盖ASP.NET渲染的Page_ClientValidate
函数。 StackOverflow上有很多问题可以解决这个问题。