2010-12-12 38 views
0

Ich habe ein paar Validierungssteuerelemente mit einer validationsummary. Die clientseitigen Validierungen werden angezeigt, nachdem der Benutzer das Textfeld für die Validierung verlassen hat. Die serverseitige Validierung zeigt nie auf. Die Validationsummary zeigt nie auf.ValidationSummary wird nicht angezeigt

Was mache ich falsch?

    <div class="designPhotoMiddleText" id="MiddleReg" > 
       <asp:Panel DefaultButton="linkRegister" runat="server" ID="panRegister" > 
        Jetzt kostenlos registrieren:<br /> 
        <br /> 

        <table> 
         <tr> 
          <td style="width: 120px;"> 
           Username: 
          </td> 
          <td> 
           <asp:TextBox ID="txtRegisterUsername" Width="150px" runat="server"></asp:TextBox> 
           <asp:CustomValidator ValidationGroup="Register" ID="valUsername" ControlToValidate="txtRegisterUsername" 
           OnServerValidate="IsUsernameFree" CssClass="validator" 
           runat="server" ErrorMessage="CustomValidator"></asp:CustomValidator> 
          </td> 
         </tr> 
         <tr> 
          <td> 
           Passwort: 
          </td> 
          <td> 
           <asp:TextBox ID="txtRegisterPW1" Width="150px" TextMode="Password" runat="server"></asp:TextBox> 
           <asp:RegularExpressionValidator ValidationGroup="Register" CssClass="validator" ControlToValidate="txtRegisterPW1" ID="valPasswordLenght" runat="server" ErrorMessage="Das Passwort muss mindestens 6 Zeichen haben."></asp:RegularExpressionValidator> 
          </td> 
         </tr> 
         <tr> 
          <td> 
           Passwort erneut: 
          </td> 
          <td> 
           <asp:TextBox ID="txtRegisterPW2" Width="150px" TextMode="Password" runat="server"></asp:TextBox> 
           <asp:CompareValidator CssClass="validator" ValidationGroup="Register" 
            ID="valPW" ControlToCompare="txtRegisterPW2" ControlToValidate="txtRegisterPW1" runat="server" ErrorMessage="Die eingegebenen Passwörter stimmen nicht überein."></asp:CompareValidator> 
          </td> 
         </tr> 
         <tr> 
          <td> 
           Email: 
          </td> 
          <td> 
           <asp:TextBox ID="txtRegisterEmail" Width="150px" runat="server"></asp:TextBox> 
           <asp:RegularExpressionValidator ValidationGroup="Register" CssClass="validator" ForeColor="black" 
            ControlToValidate="txtRegisterEmail" ID="valMail" runat="server" 
            ValidationExpression=".*@.*\.(com|net|org|edu|mil|at?|de?|ch?|uk?)$" 
            ErrorMessage="Bitte geben Sie eine gültige EMail-Adresse ein." 
            Display="Dynamic"></asp:RegularExpressionValidator> 
          </td> 
         </tr> 
         <tr> 
          <td> 
          </td> 
          <td> 
           <asp:CheckBox ID="chkRegsiterAGBs" runat="server" /> 
           <asp:HyperLink ID="linkAGB" Target="_blank" NavigateUrl="~/AGBs.aspx" runat="server">AGBs</asp:HyperLink> gelesen 
           <asp:CustomValidator ValidationGroup="Register" ID="valAGB" 
           OnServerValidate="IsAGBChecked" CssClass="validator" 
           runat="server" ErrorMessage="CustomValidator"></asp:CustomValidator> 
          </td> 
         </tr> 
         <tr> 
          <td colspan="2"> 
           <asp:LinkButton CausesValidation="true" ID="linkRegister" CssClass="linkWhite" runat="server" 
            onclick="linkRegister_Click">Jetzt Registrieren</asp:LinkButton> 
           <asp:ValidationSummary ValidationGroup="Register" ID="sumRegister" runat="server" 
           HeaderText="Fehler:" 
           ShowSummary="true" DisplayMode="BulletList" /> 
          </td> 
         </tr> 
        </table> 
        </asp:Panel> 
       </div> 



    public void IsUsernameFree(object source, ServerValidateEventArgs value) 
    { 
     string username = value.Value; 
     DAL.User user = DAL.UserHandling.GetUserByName(username); 
     value.IsValid = (user == null); 
    } 

    public void IsAGBChecked(object source, ServerValidateEventArgs value) 
    { 
     value.IsValid = (chkRegsiterAGBs.Checked); 
    } 

Antwort

2

sicher sagen kann nicht auf den Code aus suchen Sie gepostet haben, sind aber Sie können sich die überall IsValid Eigenschaft Seite? Z.B. bevor irgendwelche anderen Methoden ausgeführt werden?

if (Page.IsValid){ 

    //Do additional processing 
    //register user etc. 
} 

Diese Prüfung erzwingt die Ausführung aller Validierungskontrollen auf der Seite und sollte dann die Anzeige Ihrer Validierungsfehler auslösen.

EDIT:

Sie müssen die Validation auf ‚Registrieren‘ in Ihrem Markup setzen, die auch benötigt, Ihr RegularExpressionValidator für Passwort linkRegister Steuer

`<asp:LinkButton CausesValidation="true" ID="linkRegister" CssClass="linkWhite" runat="server" OnClick="linkRegister_Click" ValidationGroup="Register">Jetzt Registrieren</asp:LinkButton>` 

definiert seine Validation Eigenschaft in dem festgelegt hat Markup:

`<asp:RegularExpressionValidator ValidationGroup="Register" 
    CssClass="validator" ControlToValidate="txtRegisterPW1" 
    ID="valPasswordLenght" runat="server" ErrorMessage="Das Passwort 
    muss mindestens 6 Zeichen haben." Validationexpression="[\w+\d+]{6,}" 
</asp:RegularExpressionValidator>` 
+0

Ja, tue ich. Auf linkRegister_Click. – Kovu

+0

Ich * denke * Ich habe dein Problem gefunden - siehe meine Änderungen oben. – 5arx

+0

Funktioniert perfekt, gut, danke. – Kovu