我有一个包含5行和2列的表格。每个单元格都包含一个文本框。如果每列中的一个文本框为空,我想显示错误。我想要连续填写两个文本框,或者两个文本框都填空。
我如何通过Asp.net验证控件执行此操作?
我想扩展CompareValidator,这样只有当controlToValidate和controlToCompare都有一些文本或两者都是空的时候才会验证它。
答案 0 :(得分:0)
您需要使用CustomValidator
并处理其ServerValidate
事件(以及可选的ClientValidationFunction
用于客户端验证)。您可以在页面上执行一个并检查所有行,或者每行可以有一行,并使用ControlToValidate
属性为您提供要验证的行的上下文。
客户端验证的任何示例都取决于您的布局和您正在使用的任何JavaScript框架。它可能看起来像这样:
<table>
<tr>
<td><asp:TextBox runat="server" ID="TextBox11" /></td>
<td><asp:TextBox runat="server" ID="TextBox12" /></td>
</tr>
<tr>
<td><asp:TextBox runat="server" ID="TextBox21" /></td>
<td><asp:TextBox runat="server" ID="TextBox22" /></td>
</tr>
<tr>
<td><asp:TextBox runat="server" ID="TextBox31" /></td>
<td><asp:TextBox runat="server" ID="TextBox32" /></td>
</tr>
<tr>
<td><asp:TextBox runat="server" ID="TextBox41" /></td>
<td><asp:TextBox runat="server" ID="TextBox42" /></td>
</tr>
<tr>
<td><asp:TextBox runat="server" ID="TextBox51" /></td>
<td><asp:TextBox runat="server" ID="TextBox52" /></td>
</tr>
</table>
<asp:CustomValidator ID="TextBoxPairValidator" runat="server" ControlToValidate="TextBox11" ClientValidationFunction="TextBoxPairValidator_ClientValidate" />
<script type="text/javascript">
(function () {
window.TextBoxPairValidator_ClientValidate = function (sender, args) {
var other = document.getElementById(sender.id.slice(0, -1) + '2');
args.IsValid = (sender.value === '' && other.value === '')
|| (sender.value !== '' && other.value !== '');
};
}());
</script>
这个例子显然假设一个相当简单的布局和相当静态的命名(即如果你的控件在命名容器中,你可能无法使用ID技巧从一个文本框转到另一个文本框)。希望这足以让你开始。