问题是这样的:
BOSS设计了一个自定义控件,由1个textbox组成。然后我加了一个RequiredFieldValidator。用来让textbox不为空。
如何让RequiredFieldValidator在客户端对textbox进行验证?而不是在服务端验证。
换句话说就是当textbox为空时,前台在回发前直接就挡住。

解决方案 »

  1.   

    直接把 RequiredFieldValidator 放在自定义控里比较好
      

  2.   

    不明白。
    JS做这个很简单的,
    添加提交表单form的属性onsubmit = "return submintClick();"
    在JS方法submintClick()里面判断是否为空,如果为空返回false,
    就不会提交
      

  3.   

    楼上的,我有点感觉了
    本人小白。代码能开懂,但不知道如何用,在哪里用。
    JS代码应该写在哪里?ASPX?写在什么位置。。
      

  4.   

    RequiredFieldValidator的作用:
    本身就是客户端验证!!
      

  5.   

    RequiredFieldValidator 控件如果输入不符合跟本就不能操作下一步啊其实用JS。。或后台直接判断很简单个事
      

  6.   

    用户控件代码:
    <%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl2.ascx.cs" Inherits="UserControl_WebUserControl2" %>
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
    <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" 
        ControlToValidate="TextBox1" ErrorMessage="不能为空!!" SetFocusOnError="True">*</asp:RequiredFieldValidator>页面代码:
        <form id="form1" runat="server">
             <uc1:WebUserControl2 ID="WebUserControl21" runat="server" />
            <asp:Button ID="Button1" runat="server" Text="Button" />
        </form>就OK了!!
      

  7.   

        public int cnt
        {
            get {   return Convert.ToInt32(tbcnt.Text.Trim()); }
            set {   tbcnt.Text = value.ToString();
        }这是自定义控件TEXTBOX的属性,如果什么都不输入,提交后它会先报错(因为为空,转换出错),而不是先执行RequiredFieldValidator的验证。
      

  8.   

    <asp:RequiredFieldValidator ID="RFVcnt" runat="server" ControlToValidate="tbcnt"  ErrorMessage="不能为空" Width="101px" SetFocusOnError="True"></asp:RequiredFieldValidator>这个我早就改好了。
      

  9.   

    这是form的样子: 
    <form action="xxxx" method="post" name="yyyy" onsubmit="return checkText();">下面的脚本放在页面随便那个地方:
    <script type="text/javascript">
    function checkText(){
        var obj = document.getElementById("textbox111");
        if(obj.value == "" || obj.value == null){
            return false
    }
    }
    </script>
      

  10.   

    建议楼主:属性的返回类型改为string,如:
        public string cnt
        {
            get
            {
                return tbcnt.Text.Trim();
            }
            set
            {
                tbcnt.Text = value.ToString();
            }
        }
      

  11.   

    不过注意textbox控件的id,
    因为你用的服务器控件(也就是asp控件),
    不是html标签,
    所以,真正生成的页面中的id要看清楚,
    js只认页面生成的textbox的id.
      

  12.   

    <form action="xxxx" method="post" name="yyyy" onsubmit="return checkText();">
    放在哪里??
    是不是这个东西就类似于弹出一个消息框??
      

  13.   

     
    koukoujiayi 能不能帮我把FORM写全....
      

  14.   

    这又是另外的一个问题,
    这就是放在页面的<form.....>中,
    作用按提交按钮去执行js的checkText()函数!!
      

  15.   

    页面没有form ,那我该怎样执行js?
      

  16.   

    补充20楼的!!
    页面代码
        <form id="Form1"  action="Default.aspx" method="post" name="yyyy" onsubmit="return checkText();">
        <input id="Button1" type="submit" value="提交" /></div>
        </form>按提交按钮,首先会去执行js的checkText()涵数,然后执行action后的代码,打开一个网页Default.aspx这不是asp.net的方式,是过去asp的方式!!
      

  17.   

    用户控件页面代码:
    <%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl2.ascx.cs" Inherits="UserControl_WebUserControl2" %>
    <asp:TextBox ID="tbcnt" runat="server"></asp:TextBox>
    <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" 
        ControlToValidate="tbcnt" ErrorMessage="不能为空!!" SetFocusOnError="True" 
        Display="Dynamic">*</asp:RequiredFieldValidator>用户控件c#代码:
    public partial class UserControl_WebUserControl2 : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {    }
        public string cnt
        {
            get
            {
                return tbcnt.Text.Trim();
            }
            set
            {
                tbcnt.Text = value.ToString();
            }
        }
    }调用用户控件页面代码:
        <form id="form1" runat="server">
            <uc1:WebUserControl2 ID="WebUserControl21" runat="server" />
            <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
        </form>调用用户控件c#代码:
        protected void Button1_Click(object sender, EventArgs e)
        {
            Response.Write(WebUserControl21.cnt.ToString());
        }楼主可新建用户控件和页面,通过后再加入你的项目!!
      

  18.   

    UP!
    RequiredFieldValidator控件,服务器控件,生成JavaScript先在客户端验证,如果客户端禁用JavaScript,将会在服务器端验证。《C#与.NET3.5高级程序设计(第四版)》里这么提过
      

  19.   

    如何实现验证控件的立即验证,不需要button的onclick事件找到一个类似的问题。
      

  20.   

    RequiredFieldValidator 最终生成的是客户端代码,也就是在客户端进行的校验
    但是RequiredFieldValidator存在一个问题,就是不能判断是否非空如果楼主仅仅是要做非空校验,用RequiredFieldValidator控件如果既要验证格式,又要验证非空,就得两个控件都用,这样做就不如自己用js代码来实现了,也麻烦不了多少
      

  21.   

    如果仅仅是验证非空<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" 
                ControlToValidate="TextBox1" ErrorMessage="RequiredFieldValidator"></asp:RequiredFieldValidator>
      

  22.   

    <asp:RequiredFieldValidator ID="RFVcnt" runat="server" ControlToValidate="tbcnt"  ErrorMessage="*假币张数" Width="101px" SetFocusOnError="True" Display="Dynamic">我也会写啊。
      

  23.   

    <%@ Control Language="C#" AutoEventWireup="true" CodeFile="ChoiceRMBnVertype.ascx.cs" Inherits="common_controls_ChoiceRMBnVertype" %>
    <table>
    <tr>
        <td style="width: 2px; height: 40px;">
            <asp:Label ID="Label3" runat="server" Text="券别/版别" Width="189px"></asp:Label></td>         
                 <td style="width: 67px; height: 40px;">
                     <asp:DropDownList ID="DropDownListRMBtype" runat="server" AutoPostBack="True" Width="154px" OnSelectedIndexChanged="DropDownListRMBtype_SelectedIndexChanged">
                     </asp:DropDownList></td>
      
        <td style="height: 40px; width: 49063px;">
            <asp:DropDownList ID="DropDownListVertype" runat="server"
                Width="100px">
            </asp:DropDownList></td>
        <td style="height: 40px">
            <asp:Literal ID="LiteralDenomination" runat="server" Visible="False"></asp:Literal></td>
                             </tr>
                             <tr><td style="height: 21px; width: 2px;">
                                 <asp:Label ID="Label1" runat="server" Text="张数" Width="189px"></asp:Label></td><td style="width: 67px; height: 21px;">
                                 <asp:TextBox ID="tbcnt" runat="server" OnTextChanged="tbcnt_TextChanged" AutoPostBack="true">
                               
                                 
                                 </asp:TextBox></td>
                                 <td style="width: 49063px; height: 21px">
                                     <asp:RequiredFieldValidator ID="RFVcnt" runat="server" ControlToValidate="tbcnt"  ErrorMessage="*假币张数" Width="101px" SetFocusOnError="True" Display="Dynamic"></asp:RequiredFieldValidator>&nbsp;
                                     <asp:RegularExpressionValidator ID="REVcnt" runat="server" ControlToValidate="tbcnt" ErrorMessage="*输入数字" ValidationExpression="\d+" Width="90px" SetFocusOnError="True"></asp:RegularExpressionValidator></td>
                                      
                             </tr>
                             
                             <tr><td style="width: 2px">
                                 <asp:Label ID="Label2" runat="server" Text="面额(单位:元)" Width="187px"></asp:Label></td><td style="width: 67px">
                                 <asp:TextBox ID="tbamt" runat="server" ReadOnly="True"></asp:TextBox></td>
                                 <td style="width: 49063px">
                                 </td>
                             </tr>
                                 
      </table>
      

  24.   

    textbox的autopostback是true,这样做是为了配合DropDownList。
      

  25.   

    public int cnt
    {
    get { return Convert.ToInt32(tbcnt.Text.Trim()); }
    set { tbcnt.Text = value.ToString();
    }这是自定义控件TEXTBOX的属性,如果什么都不输入,提交后它会先报错(因为为空,转换出错),而不是先执行RequiredFieldValidator的验证。
      

  26.   

    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
    <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" 
    ControlToValidate="TextBox1" ErrorMessage="不能为空!!" SetFocusOnError="True">*</asp:RequiredFieldValidator>
      

  27.   

    <asp:TextBox ID="tbcnt" runat="server" OnTextChanged="tbcnt_TextChanged" onchange="if (!Page_ClientValidate()) return;"  AutoPostBack="true" />