具有表单字段验证问题的asp.net自定义控件

时间:2010-03-11 19:56:27

标签: c# asp.net

我创建了一个自定义的asp .net控件,某些字段具有与之关联的验证控件。 当我在页面上声明多个初始化时出现问题。当我在其中一个初始化控件上点击提交时,表单验证会在声明的所有其他控件上发生。由于这个问题,我无法提交表格。这是代码

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="FinancialAdvisorHelp.ascx.cs" Inherits="FinancialAdvisorHelp" %>

<table width="316" border="0"  cellpadding="0" cellspacing="0">
  <tr>
     <td colspan="2" >
     <asp:RequiredFieldValidator 
              ID="RequiredFieldValidatorMember" runat="server" 
              ErrorMessage="Pleae enter member name. " ControlToValidate="TextBox_Name"></asp:RequiredFieldValidator>

       <asp:RequiredFieldValidator ID="RequiredFieldValidatorEmail" runat="server" ErrorMessage="Please enter email. " ControlToValidate="TextBox_email"></asp:RequiredFieldValidator>
        <asp:RegularExpressionValidator ID="RegularExpressionValidatorDarryEmail" runat="server" 
                     ControlToValidate="TextBox_email" ValidationExpression=".*@.*\..*"
                     ErrorMessage="<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;      
                                       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
                                       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;      Invalid Email."> </asp:RegularExpressionValidator>
     </td>
     </tr>
     <tr>
    <td width="165"><p style="font-family:Palatino Linotype; font-size:12px; margin:0; padding:0;">Member Name*</p>
        <asp:TextBox ID="TextBox_Name" runat="server"  CausesValidation="True"></asp:TextBox>

        </td>
    <td width="151" align="right"><p style="font-family:Palatino Linotype; font-size:12px; margin:0 0 0 4px; padding:0; text-align:left;">E-Mail Address*</p>
      <asp:TextBox  id="TextBox_email" runat="server"  CausesValidation="True"></asp:TextBox>

      </td>
  </tr>
  <tr>
    <td colspan="2" align="right"><p style="font-family:Palatino Linotype; font-size:12px; margin:0; padding-right:50px;"><br />
      Telephone Number</p>
    <asp:TextBox id="TextBox_phone" runat="server"  CausesValidation="True"></asp:TextBox>
    </td>
    </tr>
  <tr>
    <td colspan="2"><p style="font-family:Palatino Linotype; font-size:12px; margin:0; padding:0;">Ask Darryl your question</p>
      <asp:TextBox ID="TextBox_question" runat="server" Rows="7" Columns="48" 
            style="width:310px" TextMode="MultiLine"></asp:TextBox>
       </td>
  </tr>
  <tr>
    <td colspan="2"><p style="font-size:10px; margin:0; padding:0; float:left; width:240px; line-height:12px;">Note: you should receive a response within two (2) business days.<br />
    *Required information.</p>
        <asp:ImageButton ID="ImageButton_Advisor" runat="server" alt="submit" 
            width="63" height="18" 
            style="border:0; padding:0; margin:10px 0 0 0; float:right;" ImageUrl="./images/investments/submit.gif"
             />
            <asp:HiddenField ID="HiddenFieldAdvisorEmail" Value="" runat="server" />
      </td>
      <tr><td colspan="2">
          &nbsp;</td></tr>
    </tr>
</table>

2 个答案:

答案 0 :(得分:1)

对导致验证的所有表单元素使用ValidationGroup属性,包括提交按钮。触发验证时,它只会检查指定了相同ValidationGroup的其他元素。

要确保它在页面上每个控件实例中都是唯一的,请使用UserControl的ID作为后面代码中的验证组。

RequiredFieldValidatorEmail.ValidationGroup = this.ClientID;

可在此处找到更多信息:http://www.dotnet-guide.com/validationgroups.html

答案 1 :(得分:0)

我很难解读你的问题。

  • 验证组

听起来您可能想要利用 validation groups 。当您有多个应该验证不同控件的触发器时,这就是使用它。

  • 检查您的验证器和自定义控件

如果您仍然遇到问题,当验证程序出现错误并触发验证时,似乎“没有任何反应”(实际发生的情况是验证程序错误输出且页面类型刚刚停止)。您的自定义控件也可能存在问题。

  • 检查您的验证码和ID
  

当我宣布更多时,问题就出现了   而不是页面上的一次初始化

这是什么意思?我想知道你是否在代码中动态声明控件?这也可能是你的问题。每个ASP.NET控件(包括验证器,自定义控件......)都需要它自己的唯一ID。您还可以使用多个验证程序检查单个控件,但单个验证程序无法验证多个控件。