2009-04-26 25 views
11

Ho il seguente regex impostato come proprietà ValidationExpression su un RegularExpressionValidator in un modulo Web. Quando inserisco un carattere non valido nel controllo convalidato, il validatore lo rileva e mostra un messaggio di errore.RegularExpressionValidator non rileva stringhe vuote

<appSettings> 
    <add key="categoryPattern" value="^[a-zA-Z0-9_+\-() ]{1,50}$" /> 
</appSettings> 

mio validatore:

<asp:RegularExpressionValidator ValidationExpression="<%$ AppSettings:categoryPattern %>" 

Il server della validazione lato:

Regex rex = new Regex(ConfigurationManager.AppSettings["categoryPattern"]); 
if (!rex.Match(categoryName).Success) 
{ 
    throw new ArgumentException("CategoryName must match expression: " + rex); 

Come si può vedere, esattamente lo stesso modello viene applicato lato client e lato server.

Tuttavia, quando si deseleziona il controllo convalidato e si invia una stringa vuota, il programma di convalida pensa che sia OK e viene visualizzato un errore dalla convalida del server. Qualcuno sa cosa c'è di sbagliato qui, ad eccezione del contratto rotto di RegularExpressionValidator?

risposta

17

È di progettazione. Dovresti anche aggiungere uno RequiredFieldValidator per forzare l'inserimento dell'utente. RegularExpressionValidator presuppone che i campi vuoti siano validi (e nemmeno li eseguono tramite Regex). La ragione di questo è che, ad esempio, potresti avere un campo opzionale Email address 2 nel modulo che non è obbligatorio, ma se è inserito, dovrebbe essere un indirizzo email valido. Per ottenere questo facilmente, altri validatori ignorano i campi vuoti e se devi renderli obbligatori, devi semplicemente aggiungere un altro RequiredFieldValidator.

In realtà, non è necessario manualmente riconvalidare sul server. I validatori ASP.NET supportano anche la convalida lato server. Potresti semplicemente controllare la proprietà Page.IsValid.

+0

Grazie a @Mehrdad, ho aggiunto un RequiredFieldValidator, ma la convalida del mio server non si trova sulla pagina, ma nella classe utilizzata dalla pagina e potenzialmente altro codice, quindi lo terremo. – ProfK

+0

Prego. –

Problemi correlati