2009-06-03 9 views
2

code:problème de validation de types de fichiers dans un contrôle ASP.NET FileUpload avec RegularExpressionValidator

<span>Upload Adobe Acrobat file<img src="../../Images/UI/pdf.jpg" style="height: 25; 
    width: 20" height="25" width="20" /></span> 
<asp:FileUpload ID="uplPdf" runat="server" /> 
<asp:RegularExpressionValidator ID="valPdf" runat="server" ErrorMessage="Only PDF files are allowed!" 
    ValidationExpression="^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))(.pdf)$" Display="Dynamic" 
    ControlToValidate="uplPdf" ValidationGroup="upload" /> 
<br /> 
<asp:Button ID="btnUpload" runat="server" Text="Upload files" OnClick="btnUpload_Click" 
    ValidationGroup="upload" /> 
Code

derrière:

if (valPdf.IsValid && uplPdf.HasFile) 

IsValid retourne false après un nom de fichier pdf valide a été enterd. Notez que si aucun fichier n'est spécifié, renvoie true.

Répondre

0

J'ai ajouté la liste de fichiers à une collection de chaînes dans les paramètres du projet.

Je mis la regex programme:

public static string PrepareValidExtensionRegex(string[] allowedFileTypes) 
{ 
    for (int i = 0; i < allowedFileTypes.Length; i++) 
    { 
     char[] chars = allowedFileTypes[i].ToCharArray(); 
     int length = chars.Length; 
     string[] ret = new string[length]; 
     for (int j = 0; j < length; j++) 
     { 
      char ch = chars[j]; 
      char replacement = char.IsLower(ch)? 
           char.ToUpper(ch): 
           char.ToLower(ch); 
      ret[j] = "[" + ch + replacement + ']'; 
     } 
     allowedFileTypes[i] = '(' + string.Join("", ret) + ')'; 
    } 

    return @"^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))(" + 
     string.Join("|", allowedFileTypes) + ")$"; 
} 

//Usage: 
string[] allowedFiles = new string[] { "jpg", "gif" }; 
RegexValidator.ValidationExpression = PrepareValidationExpression(allowedFiles); 
0

Eh bien ... Je ne pense pas que cette expression rationnelle fonctionnera dans ce cas. Essayez celui-ci:

ValidationExpression = "^ + pdf $.".

il devrait fonctionner pour les fichiers se terminant en .pdf, ce qui est ce que vous voulez.

+0

ne fonctionne pas, pire encore; Avant cela, il travaillait sur le client et sur le serveur il signalait false pour IsValid, maintenant, même dans le client, il montre l'erreur. – Shimmy

2

Essayez dans votre RegularExpressionValidator

<asp:RegularExpressionValidator ID="valPdf" runat="server" 
    ErrorMessage="Only PDF files are allowed!" 
    ValidationExpression=".+.(P|p)(D|d)(F|f)$" 
    Display="Dynamic" ControlToValidate="uplPdf" ValidationGroup="upload" /> 

Ensuite, dans votre codebehind, appelez Page.Validate("upload") avant de poursuivre:

Page.Validate("upload"); 
if(valPdf.IsValid && uplPdf.HasFile) 
{ 
    //Proceed with the upload 
} 

NOTE: Le ValidationExpression ci-dessus correspond à tout les fichiers se terminant * .pdf dans une manière cas-insentive. Par conséquent "c:\somepath\somefile.pdF", "somefile.pDF" et "somefile.Pdf" passeront tous la validation.

+0

J'utilise un panneau de mise à jour. – Shimmy

+0

Avez-vous essayé le code ci-dessus? Quels ont été les résultats? –

+0

Works, je l'ai marqué comme réponse. Merci beaucoup pour vos efforts. – Shimmy

0

Eh bien oui, normalement vous devriez échapper au point.

En outre, dans la question, il est utilisé une expression rationnelle POSIX fonction, alors que normalement nous utilisons des expressions Perl Styled dans .NET

Avez-vous essayé quelque chose comme:

\.pdf$ 

Et bien sûr, assurez-vous qu'il ne tient pas compte le cas des lettres.