Question

J'ai un formulaire sur une page HTML qu'un utilisateur doit utiliser pour télécharger un fichier qui affiche à une page ASPX. Dans le derrière de code, je veux tester si un fichier a été effectivement chargé.

if (Request.Files.Count > 0)
{
    DoStuff(Request.Files[0]);
}
else
{
    throw new Exception("A CSV file must be selected for upload.");
}

Je ne suis jamais arrivé à un autre. Est-ce juste comment fonctionne ASP.NET? Si j'ai un élément d'entrée de fichier de type, est-il toujours aller télécharger un « fichier », même si l'on est pas sélectionné?

Quelle est la bonne façon de le faire? Peut-être cela?

if (Request.Files.Count > 0 && Request.Files[0].ContentLength > 0)
{
    DoStuff(Request.Files[0]);
}
else
{
    throw new Exception("A CSV file must be selected for upload.");
}
Était-ce utile?

La solution

Peut-être que cela va faire:

if (Request.Files.Count > 0 && Request.Files[0].ContentLength > 0)
{
    DoStuff(Request.Files[0]);
}
else
{
    throw new Exception("A CSV file must be selected for upload.");
}

Autres conseils

Request.Files.Count contient toujours pas. des éléments de <input type="file"> dans votre forme, enveloppé dans un magasin de Key:Value.

Par conséquent, si votre formulaire ne contient pas affiché le toutes les balises <input type="file">, puis Request.Files.Count retournera 0.

Chaque Key est le name du <input type="file" name="OneOfTheKeys"> et la valeur est de type HttpPostedFileWrapper.

Voir ici pour en savoir plus sur HttpPostedFileWrapper.

Vous devez utiliser le contrôle FileUpload et contrôle .HasFiles pour voir si quelque chose a été téléchargé.

http://msdn.microsoft. com / fr-fr / bibliothèque / system.web.ui.webcontrols.fileupload.aspx

Je également vous assurer que les données retour par la méthode .count n'est pas une chaîne. Une valeur de chaîne de « 0 » est toujours supérieure à une valeur entière de 0; qui serait toujours retourner vrai dans cet état.

Je voudrais essayer typecasting le retour .count comme un entier pour vous assurer que les types appropriés sont comparés. Même une chaîne '-1' a une valeur de bits supérieure à zéro int.

juste une pensée, mais je peux me tromper ....

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top