2012-05-12 6 views
12

Voglio convalidare alcune caselle di testo nella mia pagina ASP.NET utilizzando la convalida del campo richiesta ASP. E voglio visualizzare quel messaggio di errore nella parte superiore della pagina.Nascondere lo spazio non necessario quando i messaggi di errore di convalida non vengono attivati ​​nella pagina ASP

<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> 

... 

Questo funziona correttamente. Tuttavia, la prima riga della tabella mantiene il proprio spazio anche se i messaggi di errore non vengono visualizzati su di essa. Ciò causerà un aspetto sfavorevole della UI sulla pagina poiché lo spazio non necessario è presente quando la pagina viene caricata.

Come nascondere lo spazio della prima riga (riga dei messaggi di errore della convalida) mentre la pagina è in fase di caricamento e quando non vi sono errori di convalida?

risposta

2

Ho trovato un buon modo per risolvere questo problema.

Inserire la convalida in un pannello e visualizzarli come "nessuno".

<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> 

E parte superiore della pagina ASP Aggiungere un riepilogo di convalida.

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

Il riepilogo di convalida ottiene solo lo spazio richiesto in Pagina.

43

è necessario impostare

Display="Dynamic" 

proprietà alla validatore, questo farà sì che il comportamento desiderabile.

+1

Questo renderà ancora una riga vuota, quindi potrebbe non risolvere completamente il problema. – Filburt

+0

Ho capito, quindi vuoi nascondere completamente l'elemento tr, pensa che devi usare lo script JS per renderlo personalizzato. Ad esempio aggiungi onchange event al messaggio di validazione, una volta che ha cambiato css e viene visualizzato cambia css per first tr e renderlo visibile. –

+0

[La modifica dello stile di un controllo in base alla convalida (ASP.NET)] (http://stackoverflow.com/a/1405177/205233) potrebbe avere una soluzione. – Filburt

-1

Per nascondere validatori farlo

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

O

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

soluzione semplice. Aggiungi questo al validatore:

CssClass="AT3RValidator" 

.AT3RValidator { 
    display:none; 
} 

E impostare la visualizzazione = "Dinamico", ma che sarà ancora rendere lo spazio vuoto perchè che imposta visibility: hidden stile alla portata validatore generato, che è diverso dal display: none, rende spazio vuoto indesiderato.

+0

Cosa succederà quando l'errore di convalida * dovrebbe * apparire, quindi?Sembra che lo nasconderà indipendentemente dal fatto che debba essere visualizzato o meno. – TylerH

+0

quando viene generato un errore, lo stile in linea viene impostato direttamente sull'elemento, quindi sostituisce la mia classe. ma la mia classe non è realmente necessaria perché display = "Dynamic" mostra display: nessuno già. –

1

Basta aggiungere Proprietà.

Display = "Dynamic"

all'interno del vostro Validator, Esempio dare seguito.

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

Questo è un duplicato della [risposta n. 1] (http://stackoverflow.com/a/10563265/2415524). – mbomb007

+0

Kind'a akward perché le risposte con un voto più alto rimangono nel bot della pagina e non sono visualizzate per prime. –