1

我有一个内置于 .Net 4.0 的 VB Web 应用程序,并且正在尝试添加一些自定义验证。

我有 6 个 asp 文本框,我想要求用户总和为 100。所有 6 个字段都有必填字段和必填表达式验证器,要求用户输入 0.0 到 100.0 之间的数字,但我需要额外的验证才能总和为 100.0。再说一遍,6 个文本框只包含允许整数或单个十进制数字的数字。

我是一个相对较新的程序员,最好的方法是什么:

Textbox1 + Textbox2 + Textbox3 + Textbox4 + Textbox5 + Textbox 6 = 100.0(如果不是,则提示用户的值不等于 100.0,并且在固定值之前不允许单击按钮。

谢谢你的帮助!

4

1 回答 1

3

使用 aCustomValidator这是唯一允许省略的验证器ControlToValidate

<asp:CustomValidator runat="server" ID="CustomValidator1"
   Text="The sum must be 100" 
   ClientValidationFunction="clientValidate" 
   EnableClientScript="True"
   Display="Static">
</asp:CustomValidator>

ServerValidate: _

Protected Sub ServerValidation(source As Object, args As ServerValidateEventArgs) Handles CustomValidator1.ServerValidate
    Dim val1 As Decimal
    Dim val2 As Decimal
    Dim val3 As Decimal
    Dim val4 As Decimal
    Dim val5 As Decimal
    If Decimal.TryParse(TextBox1.Text, val1) AndAlso _
       Decimal.TryParse(TextBox2.Text, val2) AndAlso _
       Decimal.TryParse(TextBox3.Text, val3) AndAlso _
       Decimal.TryParse(TextBox4.Text, val4) AndAlso _
       Decimal.TryParse(TextBox5.Text, val5) Then
        args.IsValid = val1 + val2 + val3 + val4 + val5 = 100
    Else
        args.IsValid = False
    End If
End Sub

您还可以提供客户端验证功能。因此,您需要找到每个 javascript 对文本框的引用,然后计算客户端的总值。

例如:

<script type="text/javascript" >
    function clientValidate(source, arguments) {
        var txt1 = document.getElementById('<%= TextBox1.ClientID %>');
        var txt2 = document.getElementById('<%= TextBox2.ClientID %>');
        var txt3 = document.getElementById('<%= TextBox3.ClientID %>');
        var txt4 = document.getElementById('<%= TextBox4.ClientID %>');
        var txt5 = document.getElementById('<%= TextBox5.ClientID %>');
        if(txt1 != null && txt2 != null && txt3 != null && txt4 != null && txt5 != null && txt1.value != "" && !isNaN(txt1.value) && txt2.value != "" && !isNaN(txt2.value) && txt3.value != "" && !isNaN(txt3.value) && txt4.value != "" && !isNaN(txt4.value) && txt5.value != "" && !isNaN(txt5.value))
        {
            var num1 = parseFloat(txt1.value);
            var num2 = parseFloat(txt2.value);
            var num3 = parseFloat(txt3.value);
            var num4 = parseFloat(txt4.value);
            var num5 = parseFloat(txt5.value);
            arguments.IsValid = num1 + num2 +num3 + num4 + num5 == 100;
        }
        else
            arguments.IsValid = false;
    }
</script>
于 2013-09-30T14:34:57.013 回答