Je mets cela dans une classe BaseController, à partir de laquelle tous mes contrôleurs héritent:
// this just prefixes datetime as yyyyMMddhhmmss to the filename, to
// be use that no name collision will occur.
protected static String PrefixFName(String fname)
{
if (String.IsNullOrEmpty(fname))
{
return null;
}
else
{
return String.Format("{0}{1}",
DateTime.Now.ToString("yyyyMMddhhmmss"),
fname);
}
}
protected String SaveFile(HttpPostedFileBase file, String path)
{
if (file != null && file.ContentLength > 0)
{
if (path == null)
{
throw new ArgumentNullException("path cannot be null");
}
String relpath = String.Format("{0}/{1}", path, PrefixFName(file.FileName));
try
{
file.SaveAs(Server.MapPath(relpath));
return relpath;
}
catch (HttpException e)
{
throw new ApplicationException("Cannot save uploaded file", e);
}
}
return null;
}
Ensuite, dans le contrôleur que je fais:
savedPath = SaveFile(Request.Files["logo"], somepath);
Request.Files est vide, mais mon champ de chaîne pour le nom de fichier est en cours de définition. Ma vue HTML est: – littlechris
Etrange ... qu'est-ce que c'est? la valeur retournée? En outre, pourquoi définissez-vous une valeur attr pour l'étiquette d'entrée? Notez que vous ne pouvez pas le réutiliser si vous réexécutez le formulaire (par exemple, si le formulaire n'est pas valide et que l'utilisateur doit corriger quelque chose). – giorgian
L'a triée. Onglet Nom manquant, seul l'identifiant était affiché. :) – littlechris