2012-05-12 3 views
12

Ich möchte einige Textfelder in meiner ASP.NET-Seite mithilfe der ASP-Feldvalidierung validieren. Und ich möchte diese Fehlermeldung oben auf der Seite anzeigen.Nicht mehr benötigten Speicherplatz ausblenden, wenn Validierungsfehlermeldungen in der ASP-Seite nicht ausgelöst werden

<table> 
    <tr><td colspan='2'><b> User Input</b><br/></td></tr> 
    <tr><td colspan='2'> 
      <%--input validations--%> 
      <asp:RegularExpressionValidator ID="regexpName1" runat="server"  
       ErrorMessage="This expression does not validate." 
       ControlToValidate="TextBox_adTitle"  
       ValidationExpression="^[a-zA-Z'.\s]{1,40}$" /> 
      <br /> 
      <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" 
       ControlToValidate="TextBox_1" ErrorMessage="RequiredFieldValidator"></asp:RequiredFieldValidator> 
     <br /> 
     </td> 
    </tr> 
    <tr><td> 
     <asp:Label ID="Label_name" runat="server" Text="Seller Name * "></asp:Label> 
     </td> 
     <td> 
      <asp:TextBox ID="TextBox_1" runat="server" ReadOnly="True" ></asp:TextBox>   
     </td> 
    </tr> 

... 

Das funktioniert gut. Die erste Tabellenzeile behält jedoch ihren Platz, selbst wenn Fehlermeldungen nicht angezeigt werden. Dies führt dazu, dass die Benutzeroberfläche auf der Seite schlecht aussieht, da beim Laden der Seite nicht genügend Speicherplatz vorhanden ist.

Wie kann ich den Platz der ersten Zeile (Spalte der Fehlermeldungen der Validierung) während des Ladens der Seite und wenn kein Validierungsfehler vorliegt, ausblenden?

Antwort

2

Ich fand einen guten Weg, um dies zu beheben.

Setzen Sie Ihre Validierung in ein Panel und lassen Sie sie als "none" anzeigen.

<asp:Panel ID="Panel1" runat="server" > 
    <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" 
      ErrorMessage="RequiredFieldValidator1" ControlToValidate="TextBox1" Display="None"></asp:RequiredFieldValidator><br /> 
     <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" 
      ErrorMessage="RequiredFieldValidator2" ControlToValidate="TextBox2" Display="None"></asp:RequiredFieldValidator><br /> 
</asp:Panel> 

Und oben auf Ihrer ASP-Seite Fügen Sie eine Validierungszusammenfassung hinzu.

<table> 
     <tr> 
     <td> <asp:ValidationSummary id="summery1" runat="server"/></td> 
     </tr> 
    .... 

Die Überprüfungszusammenfassung erhält nur erforderlichen Speicherplatz in Page.

43

Sie benötigen

Display="Dynamic" 

Eigenschaft auf Ihre Validator gesetzt ist, wird diese wünschenswerte Verhalten führen.

+1

Dies wird immer noch eine leere Zeile rendern, so kann es das Problem möglicherweise nicht vollständig lösen. – Filburt

+0

Ich habe es, also möchten Sie vollständig tr Element ausblenden, denke, dass Sie JS-Skript verwenden müssen, um benutzerdefinierte zu machen. Zum Beispiel fügen Sie onchange-Ereignis zur Validierungsnachricht hinzu, sobald es css geändert hat und angezeigt wird, ändern Sie css für den ersten tr und machen Sie es auch sichtbar. –

+0

[Ändern des Stils eines Steuerelements basierend auf Validierung (ASP.NET)] (http://stackoverflow.com/a/1405177/205233) kann eine Lösung haben. – Filburt

-1

auszublenden Validatoren tun, um diese

<tr> 
    <td>TEXT</td> 
</tr> 
<tr> 
    <td>INPUT 
    <br/> 
    <asp:validator....></> 
    </td> 
</tr> 

ODER

<tr> 
    <td>TEXT</td> 
</tr> 
<tr> 
    <td>INPUT 
    <div> 
     <asp:validator....></> 
    </div> 
    </td> 
</tr> 
0

Einfache Lösung. Fügen Sie diese auf Validator:

CssClass="AT3RValidator" 

.AT3RValidator { 
    display:none; 
} 

und auf Anzeige = „Dynamic“, aber das wird noch leeren Raum machen, weil die Sicht setzt: hidden Stil erzeugt Validator Spanne, die von der Anzeige unterscheidet: keine, es macht unerwünschter leerer Raum.

+0

Was wird passieren, wenn Der Validierungsfehler * sollte dann erscheinen?Es sieht so aus, als würde es es verstecken, egal ob es angezeigt werden soll oder nicht. – TylerH

+0

Wenn der Fehler ausgelöst wird, wird der Inline-Stil direkt auf element gesetzt, so dass er meine Klasse überschreibt. aber meine Klasse wird nicht wirklich benötigt, da display = "Dynamic" setzt display: none schon. –

1

Fügen Sie einfach Property hinzu.

Display = "Dynamic"

in Ihrem Validator, Beispiel unten geben.

<asp:RequiredFieldValidator ID="rfvEmail" runat="server" Display="Dynamic" ForeColor="Red" ErrorMessage="Please enter Email" ControlToValidate="txtEmail" ValidationGroup="addManufacture"></asp:RequiredFieldValidator> 
+1

Dies ist ein Duplikat der [# 1 Antwort] (http://stackoverflow.com/a/10563265/2415524). – mbomb007

+0

Bitte erkundigen Sie sich, warum Antworten mit höherer Stimmenzahl im Bot der Seite verbleiben und nicht zuerst angezeigt werden. –

Verwandte Themen