2010-03-11 94 views
0

我創建了一個自定義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> 

回答

0

我很難破譯你的問題。

  • 確認團組

這聽起來像你可能要採取的validation groups優勢。當你有多個觸發器應該驗證不同的控件時,這就是要使用的。

  • 檢查校驗和自定義控件

如果您仍然有問題,當驗證有錯誤,你觸發驗證,看來「什麼也沒發生」(真正的情況是,驗證器錯誤,頁面類型停止)。您的自定義控件也可能存在問題。

  • 檢查校驗和ID的

問題arised當我宣佈更多 比一個初始化頁面

你是什麼意思呢?我不知道你是否在代碼中動態地聲明控件?這也可能是你的問題。每個ASP.NET控件(包括驗證器,自定義控件,...)都需要它自己的唯一ID。您也可以有多個驗證器檢查單個控件,但單個驗證器無法驗證多個控件。

+0

我多次調用該控制 單頁上例如 在頁面中。 當我嘗試提交控制之一。驗證也在第二個控件上執行。 如果第一個控件實例中的所有字段都是有效的,那麼它應該提交,但是由於第二個控件實例的驗證失敗,它不能提交。那是不可能的。 – 2010-03-11 20:57:44

+0

哦,所以要提交頁面,第一個控件必須是有效的,但是第二個控件無效是可以的?如果是這樣,請將驗證控件關閉,或者查看是否可以將CausesValidation = False添加到第二個自定義控件。 – 2010-03-11 21:40:43

+0

我覺得這聽起來更像是你有一個情況,用戶必須填寫第一個控件,然後如果他們想要,他們可以填寫第二個,(第三,第四,..?)。考慮一個簡單的重新設計,其中第二個(/下一個)控件是不可見的,直到他們表明他們想要填寫它。不可見(即Visible =「False」)標準ASP.NET控件未經過驗證(不確定您的自定義)。 – 2010-03-11 21:44:43

1

對導致驗證的所有表單元素(包括提交按鈕)使用ValidationGroup屬性。當觸發驗證時,它將僅檢查具有指定的相同ValidationGroup的其他元素。

要確保它在頁面上的每個控件實例中都是唯一的,請在您的代碼後面使用UserControl的ID作爲驗證組。

RequiredFieldValidatorEmail.ValidationGroup = this.ClientID; 

的更多信息可在這裏找到:http://www.dotnet-guide.com/validationgroups.html

+0

在單個頁面上多次調用此控件,例如在頁面中。當我試圖提交控制之一。驗證也在第二個控件上執行。如果控制的第一個實例中的所有字段都是有效的,那麼它應該提交,但是由於第二個控制實例的驗證失敗而不能提交。那是不可能的 – 2010-03-11 20:58:23