【问题标题】:Compare first letter from 2 textboxes in asp.net forms比较asp.net表单中2个文本框的第一个字母
【发布时间】:2021-11-12 20:40:22
【问题描述】:

在我的 NIC 文本框中,我正在尝试验证 NIC 文本值的第一个字母需要与姓氏文本值的第一个字母相同。

姓氏文本框

 <div class="form-group row justify-content-center mt-2">
            <asp:Label ID="lblLName" CssClass="col-md-2 col-form-label" runat="server" Text="Last Name"></asp:Label>
            <div class="col-md-4">
                <asp:TextBox ID="txtLName" CssClass="form-control" runat="server"></asp:TextBox>
                <asp:RegularExpressionValidator ID="revLname"
                    runat="server"
                    Display="Dynamic"
                    ForeColor="Red"
                    ControlToValidate="txtLName"
                    ValidationExpression="([A-Z][a-z]+)$"
                    SetFocusOnError="true"
                    ErrorMessage="Invalid Fname"></asp:RegularExpressionValidator>
                <asp:RequiredFieldValidator
                    ID="rfvLname"
                    runat="server"
                    Display="Dynamic"
                    ForeColor="Red"
                    ControlToValidate="txtLName"
                    SetFocusOnError="true"
                    ErrorMessage="Last Name is Mandatory"></asp:RequiredFieldValidator>
            </div>
        </div>

NIC 文本框

 <div class="form-group row justify-content-center mt-2">
            <asp:Label ID="lblNic" CssClass="col-md-2 col-form-label" runat="server" Text="NIC"></asp:Label>
            <div class="col-md-4">
                <asp:TextBox ID="txtNIC" CssClass="form-control" runat="server"></asp:TextBox>
                <asp:RequiredFieldValidator
                    ID="rfvNic"
                    runat="server"
                    Display="Dynamic"
                    ForeColor="Red"
                    ControlToValidate="txtNIC"
                    SetFocusOnError="true"
                    ErrorMessage="NIC is Mandatory"></asp:RequiredFieldValidator>
                  <asp:CustomValidator
                    ID="cvNic"
                    runat="server"
                    OnServerValidate="cvNic_ServerValidate"
                    ClientValidationFunction="validateLength"
                    Display="Dynamic"
                    ForeColor="Red"
                    ControlToValidate="txtNIC"
                    SetFocusOnError="true"
                    ErrorMessage="Invalid NIC"></asp:CustomValidator>
                <asp:RegularExpressionValidator
                    ID="revNic"
                    runat="server"
                    ValidationExpression="^[a-zA-Z0-9\s]{14}$"
                    Display="Dynamic"
                    ForeColor="Red"
                    ControlToValidate="txtNIC"
                    SetFocusOnError="true"
                    ErrorMessage="Must contain 14 characters"></asp:RegularExpressionValidator>
          </div>
        </div>

我做了一个自定义验证服务器和客户端:

服务器端

protected void cvNic_ServerValidate(object source, ServerValidateEventArgs args)
    {
        if (txtLName.Text != string.Empty)
        {
            String lletter = txtLName.Text.ToLower();
            string firstletter = lletter[0].ToString();
            String nic = txtNIC.Text.ToLower();
            String nfletter = nic[0].ToString();
            if (nfletter != firstletter)
            {
                args.IsValid = false;
            }
        }
    }

客户端

  function validateLength(sender, args) {
        
        var LastName = document.getElementById['txtLName'].value;
        var Nic = document.getElementById['txtNIC'].value;
       
        if (LastName !== null || LastName !== '') {
            var lletter = LastName.toLowerCase;
            var firstletter = lletter.substr(1, 1);

            var nic = Nic.toLowerCase;
            var nfletter = nic.substr(1, 1);

            if (nfletter != firstletter) {
                return args.IsValid = false;
              
            }
        }
    

我已经做了一个条件,为了进行这种验证,它应该验证姓氏文本框是否不为空,如果是,它会提取两个文本框的第一个字母并在 if 语句中进行比较。

问题是当我点击提交时,客户端的验证不起作用,而对于服务器端,数据发送后验证正在起作用。 请问我该如何解决?

【问题讨论】:

  • 您可能需要设置ClientID 属性以匹配您的javascript。否则,ASP.NET 将在呈现控件的 HTML 时破坏名称。

标签: javascript c# asp.net


【解决方案1】:

我会使用CustomValidator 来检查txtLName 是否不为空,然后比较第一个字母。 PS 要使用substr 获取第一个字母,您需要从索引 0 开始。

<asp:CustomValidator runat="server" ID="CustomCompareValidator" 
    ClientValidationFunction="CustomCompareValidator" 
    ErrorMessage="The first letters should match"></asp:CustomValidator>

JavaScript

<script>
    function CustomCompareValidator(source, args) {
        var $txtNIC = $('#<%= txtNIC.ClientID %>');
        var $txtLName = $('#<%= txtLName.ClientID %>');
        // or use $('#txtNIC') & $('#txtLName') is you want to use the script
        // in a separate js file

        //check if lastname is not empty
        if ($txtLName.val() !== '') {

            //check if the first letters match
            if ($txtLName.val().substr(0, 1) !== $txtNIC.val().substr(0, 1)) {
                args.IsValid = false;
                return;
            }
        }

        args.IsValid = true;
    }
</script>

【讨论】:

  • 感谢您的回答。代码正在验证,但我怎样才能让它对小写字母进行验证。当我使用此代码时 var $txtNIC = $('#').toLowerCase; var $txtLName = $('#').toLowerCase;验证不起作用。
  • $txtLName.val().toLowerCase().substr(0, 1)
  • 代码很好,谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-30
  • 2015-04-27
相关资源
最近更新 更多