none
怎样在程序获得验证控件是否有效? RRS feed

  • 问题

  • 我有一个文本框,一个验证控件来验证这个文本框是否为空,另外还有一按钮。当文本框为空时,验证控件提示“不能为空!”同时按钮被隐藏起来。请问各位,如何才能实现我这一想法。谢谢!
    youl
    2010年8月18日 12:36

答案

  • <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="TestWebDemo.WebForm1" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>Hidden Demo</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
           
            <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
            <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
            <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
                ControlToValidate="TextBox1" EnableClientScript="False"
                ErrorMessage="You must fill in it!" ForeColor="#FF3300">*</asp:RequiredFieldValidator>

           
        </div>
        </form>
    </body>
    </html>

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;

    namespace TestWebDemo
    {
        public partial class WebForm1 : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
               
            }

            protected void Button1_Click(object sender, EventArgs e)
            {
                RequiredFieldValidator1.Validate();
                if (RequiredFieldValidator1.IsValid == false)
                {
                    Button1.Visible = false;
                }
            }
        }
    }

    2010年8月19日 3:00
    版主
  • 你好

    根据你的要求写出来的

      <script type="text/javascript" >
        function change()
        {
        var mes=document.getElementById("mes");
         var btn=document.getElementById("btn");
         var height=document.getElementById("text");
         if(height.value=="")
         { var mes=document.getElementById("mes");
          mes.style.display='block';
           btn.style.display='none';
         }
         else
         {
        
          mes.style.display='none';
           btn.style.display='block';
         }
       
        }
        </script>

     

    html:

    <table>
        <tr>
        <td>
        <input id="text" runat="server" type="text" onkeyup="change()" />
        </td>
        <td>
       <div id="mes"  visible="true" >不能为空</div> <div id="btn"  style="display:none" ><button id="btnrrr" runat="server" >按钮</button></div>
        </td>
        </tr>
        </table>

    希望对你有帮助!

    • 已标记为答案 youer3 2010年11月16日 1:15
    2010年9月17日 8:27
  • Dong_Wei的这个是要回传以后才会有效果,但一般情况下,验证控件是在客户端完成并阻止回传的,因此我改造一下DongWei的代码,如下:

    	<script type="text/javascript">
    		//抓取原ASP.NET客户端验证关键路径
    		var oldValidatorValidate = ValidatorValidate;
    		//偷换方法
    		ValidatorValidate = ClientValidate;
    
    		function ClientValidate(val, validationGroup, event) {
    			//继续原路径,不破坏验证原理
    			oldValidatorValidate(val, validationGroup, event);
    			//目的就是加入自定义方法的调用
    			OnValidateFinished(val);
    		}
    
    		function OnValidateFinished(arg) {
    			var validatorID = '<%= this.rfv.ClientID %>';
    			//因为多个验证控件的时候,都会执行该方法,这种情况下,Button的显示隐藏只受最后一个验证控件的影响了
    			//所以判断一下有验证控件
    			if (arg.id == validatorID) {
    				var btn = document.getElementById('<%= this.btnCommit.ClientID %>');
    				btn.style.display = arg.isvalid ? "inline" : "none";
    			}
    		}
    	</script>
    
    	<div>
    		<asp:Button ID="btnCommit" runat="server" Text="Button" CausesValidation="true" />
    		
    		<asp:TextBox ID="txtName" runat="server"></asp:TextBox>
    		<asp:RequiredFieldValidator ID="rfv" runat="server" ControlToValidate="txtName" Display="Dynamic"
    			ErrorMessage="这玩意儿是必填的"></asp:RequiredFieldValidator>
    	</div>
    在客户端捕捉验证失败的情况

     


    Love Your Neighbor as Yourself
    • 已标记为答案 youer3 2010年11月16日 1:15
    2010年9月17日 12:50

全部回复

  • 你好,

    如果按钮不用隐藏,那么就用RequiredFieldValidator验证控件,关于验证控件可以参照http://www.cnblogs.com/nacarat/archive/2008/09/28/1301266.html

    如果要隐藏,那不如自己写JavaScript,文本框、按钮、被隐藏的span里面写着“不能为空!”,onclick事件(服务器控件是OnClientClick属性)触发一个JS事件,验证某文本框是否为空,为空则显示隐藏的span,隐藏按钮,然后return false取消接下来的事件。

    2010年8月19日 0:09
  • 很遗憾,本人不会JavaScript。
    youl
    2010年8月19日 1:57
  • <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="TestWebDemo.WebForm1" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>Hidden Demo</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
           
            <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
            <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
            <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
                ControlToValidate="TextBox1" EnableClientScript="False"
                ErrorMessage="You must fill in it!" ForeColor="#FF3300">*</asp:RequiredFieldValidator>

           
        </div>
        </form>
    </body>
    </html>

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;

    namespace TestWebDemo
    {
        public partial class WebForm1 : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
               
            }

            protected void Button1_Click(object sender, EventArgs e)
            {
                RequiredFieldValidator1.Validate();
                if (RequiredFieldValidator1.IsValid == false)
                {
                    Button1.Visible = false;
                }
            }
        }
    }

    2010年8月19日 3:00
    版主
  • 你好

    根据你的要求写出来的

      <script type="text/javascript" >
        function change()
        {
        var mes=document.getElementById("mes");
         var btn=document.getElementById("btn");
         var height=document.getElementById("text");
         if(height.value=="")
         { var mes=document.getElementById("mes");
          mes.style.display='block';
           btn.style.display='none';
         }
         else
         {
        
          mes.style.display='none';
           btn.style.display='block';
         }
       
        }
        </script>

     

    html:

    <table>
        <tr>
        <td>
        <input id="text" runat="server" type="text" onkeyup="change()" />
        </td>
        <td>
       <div id="mes"  visible="true" >不能为空</div> <div id="btn"  style="display:none" ><button id="btnrrr" runat="server" >按钮</button></div>
        </td>
        </tr>
        </table>

    希望对你有帮助!

    • 已标记为答案 youer3 2010年11月16日 1:15
    2010年9月17日 8:27
  • Dong_Wei的这个是要回传以后才会有效果,但一般情况下,验证控件是在客户端完成并阻止回传的,因此我改造一下DongWei的代码,如下:

    	<script type="text/javascript">
    		//抓取原ASP.NET客户端验证关键路径
    		var oldValidatorValidate = ValidatorValidate;
    		//偷换方法
    		ValidatorValidate = ClientValidate;
    
    		function ClientValidate(val, validationGroup, event) {
    			//继续原路径,不破坏验证原理
    			oldValidatorValidate(val, validationGroup, event);
    			//目的就是加入自定义方法的调用
    			OnValidateFinished(val);
    		}
    
    		function OnValidateFinished(arg) {
    			var validatorID = '<%= this.rfv.ClientID %>';
    			//因为多个验证控件的时候,都会执行该方法,这种情况下,Button的显示隐藏只受最后一个验证控件的影响了
    			//所以判断一下有验证控件
    			if (arg.id == validatorID) {
    				var btn = document.getElementById('<%= this.btnCommit.ClientID %>');
    				btn.style.display = arg.isvalid ? "inline" : "none";
    			}
    		}
    	</script>
    
    	<div>
    		<asp:Button ID="btnCommit" runat="server" Text="Button" CausesValidation="true" />
    		
    		<asp:TextBox ID="txtName" runat="server"></asp:TextBox>
    		<asp:RequiredFieldValidator ID="rfv" runat="server" ControlToValidate="txtName" Display="Dynamic"
    			ErrorMessage="这玩意儿是必填的"></asp:RequiredFieldValidator>
    	</div>
    在客户端捕捉验证失败的情况

     


    Love Your Neighbor as Yourself
    • 已标记为答案 youer3 2010年11月16日 1:15
    2010年9月17日 12:50