【问题标题】:Custom validation in VB.net requiring user to sum textboxes to 100VB.net 中的自定义验证要求用户将文本框总和为 100
【发布时间】:2013-09-30 14:27:29
【问题描述】:

我有一个内置于 .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,并且在值固定之前不允许单击按钮。

感谢您的帮助!

【问题讨论】:

  • 你可以使用 HTML5 元素吗?

标签: asp.net vb.net validation


【解决方案1】:

使用CustomValidator,这是唯一允许省略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>

【讨论】:

  • 似乎客户端验证可能提供最多的功能,但目前我正在尝试最上面的代码。一个简单的问题,我觉得自己像个白痴一样问,我如何激活自定义验证器?我已将自定义验证器添加到我的 aspx 页面并将其添加到验证组中,该验证组在我的按钮单击文本框中的数据时进行验证,并且我已将代码添加到我的 vb 页面中。不应该将自定义验证器添加到我的验证组中,该验证组还运行我的必填字段,并且正则表达式验证器会导致它在单击我的按钮时运行?
  • @pmlevere:客户端验证功能只是一个不错的选择。最重要的方法是服务器验证,因为 javascript 完全可以被禁用。您还必须在服务器端进行验证。根据您对验证器的问题。看看我以前对相关问题的回答:stackoverflow.com/a/10172624/284240
  • 您应该真正在客户端和服务器端进行验证。如果它未能通过客户端验证,甚至不必费心将其发送到服务器。但是您绝对必须进行服务器端验证,因为很容易绕过客户端验证。
猜你喜欢
  • 2021-06-06
  • 1970-01-01
  • 1970-01-01
  • 2015-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多