【问题标题】:ASP.NET Client-side validation on textbox without postback没有回发的文本框上的 ASP.NET 客户端验证
【发布时间】:2013-07-21 22:39:21
【问题描述】:

我正在使用 ASP.NET,并希望在客户端执行以下操作,因为我不希望页面重新加载(不希望回发)。我想通过以下条件检查用户输入:

  1. 有 2 个单选按钮和 2 个文本框和 1 个按钮。像这样的东西:
  2. 用户必须勾选单选按钮才能激活文本框(默认情况下禁用文本框)
  3. 如果用户勾选单选按钮 1,则文本框 1 将被激活,文本框 2 将为空并禁用,如果用户按下按钮且文本框 1 为空,则消息 1 将激活。
  4. 第二个单选按钮和 textbox2 也是如此。

编辑

我注意到我的按钮位于<asp:button> 而不是<input type="submit>,因此它将运行我的代码以在服务器上验证。如果我错了,请纠正我。那么如何让我的<asp:button> 验证用户输入而不必传递给服务器呢?

【问题讨论】:

  • 你能提供我的代码吗?
  • 我的按钮是 不是
  • @TanSiongZhe 我认为问题是:“如何仅验证与所选单选按钮关联的文本框?”,我正确吗?
  • @MiguelAngelo 绝对是的。那么我需要更改我的头衔吗?
  • 我认为这是个好主意...因为人们理解了其他东西,正如您通过查看以前的 cmets 所看到的...或者您可以在问题本身中对此进行解释以使其更清楚。

标签: javascript asp.net


【解决方案1】:

你可以试试:

<asp:button onClientClick="return validateData();">

在 JavaScript 中应该是:

function validateData() {
    if (OK) {
        return true;
    } else {
        return false;
    }
}

return true 将使您的页面回传到服务器,而return false 将阻止您的页面这样做。希望这会有所帮助。

【讨论】:

    【解决方案2】:

    处理验证,我会使用 ASP.net 自定义验证器并使用 jquery 来协助客户端验证:

    ASP.net aspx

    <form id="form1" runat="server">
        <div>
            <div id="requiedCheck1" class="check">
               <asp:RadioButton ID="radio1" runat="server" GroupName="myGroup" />
               <asp:TextBox ID="text1" runat="server" Disabled="true"></asp:TextBox>
               <asp:CustomValidator
                   ID="val1" runat="server" ErrorMessage="Please Enter Text" ClientValidationFunction="ValidateSomething" ControlToValidate="text1" ValidateEmptyText="true" ></asp:CustomValidator>
            </div>
            <div id="requiedCheck2" class="check">
               <asp:RadioButton ID="radio2" runat="server" GroupName="myGroup" />
               <asp:TextBox ID="text2" runat="server" Disabled="true"></asp:TextBox>
               <asp:CustomValidator
                   ID="CustomValidator1" runat="server" ErrorMessage="Please Enter Text" ClientValidationFunction="ValidateSomething" ControlToValidate="text2" ValidateEmptyText="true"></asp:CustomValidator>
            </div>
            <asp:button ID="Button1" runat="server" text="Button" />
    
        </div>
    </form>
    

    请注意,我已将 ValidateEmptyText 设置为 true

    js验证函数

    function ValidateSomething(sender, args) {
    
            args.IsValid = false;
            var parentDiv = $(sender).parent(".check");
    
            var radioChecked = $(parentDiv).find("input:radio").is(":checked");
            var hasText = $(parentDiv).find("input:text").val().length > 0;
    
    
    
            if (radioChecked) {
                args.IsValid = hasText;
            } else {
                args.IsValid = true;
            }
    
        }
    

    我也会添加一个服务器端验证方法。

    如果您想获得真正的花哨,您也应该能够连接单选按钮。这将在选中单选按钮时触发验证

    $(document).ready(function () {
    
        //Wire up the radio buttons to trigger validation this is optional
        $(".check input:radio").each(function () {
            ValidatorHookupControlID($(this).attr('id'), document.getElementById("<%= val1.ClientID %>"));
            ValidatorHookupControlID($(this).attr('id'), document.getElementById("<%= val2.ClientID %>"));
        }); 
    
        //jquery to change the disabled state
        $(".check :radio").click(function(){
            var parDiv = $(this).parent(".check"); //get parent div
            //empty text and set all to disabled
            $(".check input:text").val("").prop("disabled", true);
    
            //set target to enabled
            $(parDiv).find("input:text").prop("disabled", false);
         });           
    });
    

    我添加了 jQuery javascript 来切换文本框的禁用状态。您可以在此处查看正在运行的切换:http://jsfiddle.net/cVACb/

    【讨论】:

      【解决方案3】:

      你应该使用 jquery 来达到你的目的:

      <script>
          $(document).ready(function () {
              var Error = false;
              $("#RadioButton1").click(function () {
                  $("#TextBox2").attr("disabled", "disabled");
                  $("#TextBox1").removeAttr("disabled");
              });
              $("#RadioButton2").click(function () {
                  $("#TextBox1").attr("disabled", "disabled");
                  $("#TextBox2").removeAttr("disabled");
              });
              $("#Button1").click(function () {
                  var TextBox1value = $("#TextBox1").val();
                  var TextBox2value = $("#TextBox2").val();
                  var TextBox1Disable = $("#TextBox1").attr("disabled");
                  var TextBox2Disable = $("#TextBox2").attr("disabled");
      
                  if ((TextBox1value == "") && TextBox1Disable != "disabled") {
                      $("#Label1").text("text can not be empty");
                      Error = true;
                  }
                  if ((TextBox2value == "") && TextBox2Disable != "disabled") {
                      $("#Label2").text("text can not be empty");
                      Error = true;
                  }
      
              });
      
      
              $("#form1").submit(function (e) {
                  if (Error) {
                      alert("there are Some validation error in your page...!");
                      e.preventDefault();
                  }
      
              });
      
          });
      </script>
      

      body 元素是:

      <form id="form1" runat="server">
          <div>
          </div>
          <asp:RadioButton ID="RadioButton1" runat="server" GroupName="g1" /><asp:TextBox ID="TextBox1" runat="server" Enabled="False"></asp:TextBox><asp:Label ID="Label1" runat="server" ForeColor="Red"></asp:Label>
          <br />
          <asp:RadioButton ID="RadioButton2" runat="server" GroupName="g1" /><asp:TextBox ID="TextBox2" runat="server" Enabled="False"></asp:TextBox><asp:Label ID="Label2" runat="server" ForeColor="Red"></asp:Label>
          <br />
          <asp:Button ID="Button1" runat="server" Text="Button" />
      </form>
      

      【讨论】:

        【解决方案4】:

        在您的按钮控件中,只需添加以下 sn-p:

        OnClientClick="if(Page_ClientValidate(ValidateSomething)){this.disabled=true;}"
        

        查看此链接asp.net Disable Button after Click while maintaining CausesValidation and an OnClick-Method

        【讨论】:

          【解决方案5】:

          是否将验证组添加到您的验证器以及您尝试用作触发器来检查验证的按钮?

          一旦你掌握了验证组的窍门,它们就真的很容易使用。我不会深入探讨有关验证器的太多细节,但如果这些信息有帮助,我可以随时将其添加到帖子中。希望你已经解决了你的答案。

          【讨论】:

            猜你喜欢
            • 2010-10-28
            • 1970-01-01
            • 2011-03-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-08-17
            • 1970-01-01
            相关资源
            最近更新 更多