Il y a quelque chose que je ne comprends toujours pas sur le fonctionnement du dossier Contenu dans ASP.NET MVC. Pour rendre les choses plus claires, j'ai quelques questions:
J'ai trouvé les liens suivants utiles dans le contexte de l'application Web MVC, mais j'apprécierais néanmoins quelques réponses aux questions posées ci-dessus. Je vous remercie.
Un contrôleur ASP.NET MVC peut-il renvoyer une image?
comment afficher une image à l'aide de view and controller par ASP.NET MVC
1.Le dossier de contenu est-il le dossier racine? Je veux dire est-ce que http: // localhost/ pointe vers Contenu ou est-ce autre chose?
Non, http: // localhost: port/ ne pointe pas vers le dossier de contenu. Vous pouvez accéder aux fichiers du dossier de contenu via http: // localhost: port/content/ ...
2.J'ai un fichier nommé dummyIcon.png dans le dossier Content/images/temp. Comment est-ce que je le localise depuis ma couche de domaine (qui est un projet de bibliothèque de code)?
Vous devriez pouvoir y accéder en tant que http: // localhost: port/Content/images/temp/dummyIcon.png
3.Quelle est la meilleure pratique de affichage des images dans ASP.NET MVC? Devrais-je stocker un chemin d'accès à l'image dans la base de données (que je préfère personnellement), ou est-ce que je sauvegarde un tableau d'octets et le retourner à la vue?
Le lieu où vous stockez les images dépend des besoins de votre application. Ces images génériques sont-elles utilisées pour afficher des images d'application (icônes, logo de société, etc.)? Ensuite, il est préférable de les stocker dans un système de fichiers.
Si votre application traite des images et que vous travaillez sur le stockage des images, la manipulation, etc., vous aurez peut-être besoin de DB. Je pense que stocker des images utilisées sur l'application Web est une surcharge.
Tout ce qui se trouve dans la racine pointera vers la racine s'il est ignoré par vos itinéraires:
Si vous avez une image placée à la racine de votre projet. Ensuite, disons que http:://localhost/dummy.ico"
vous donnera un 404, aucun contrôleur trouvé. Jusqu'à ce que vous le fassiez dans votre global.asax.cs
:
routes.IgnoreRoute("dummy.ico");
//you could add wildcards here to match different things
Depuis Code, si vous utilisez indique File.Open();
, vous avez besoin du chemin d'accès physique au fichier. Vous l'obtenez comme ceci:
string filePath = Server.MapPath(Url.Content("~/Content/Images/Image.jpg"));
C’est tout à fait à vous ici, même si j’ajouterais que mettre des fichiers dans la base de données a beaucoup de sens si vous voulez tout au même endroit. Si vous devez déplacer votre application, il vous suffit de déplacer la base de données.
En ce qui concerne les chemins de fichiers, rappelez-vous que vous ne souhaitez pas que les noms de fichiers soient dupliqués. Vous devrez donc attribuer à chaque fichier un GUID
, puis le lier. Cela peut être logique si vous avez un grand nombre de fichiers (ou des fichiers volumineux) afin que votre base de données ne grandisse pas comme un fou.
HTH
Vous devez créer un objet modèle à renvoyer par votre contrôleur. Dans cet exemple, je retourne SearchPageModel, une classe que j'ai créée. mais disons que cet objet a une propriété appelée imageURL
mais assurez-vous que le contrôleur renvoie réellement un ActionResult
alors par exemple ...
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Search()
{
SearchPageModel Model = new SearchPageModel();
// populate the Model properties
Model.ImageURL = "myjpeg"
return View("Search", Model);
}
je repasse ensuite cet objet de modèle à ma vue souhaitée dans ce cas, ma vue "Recherche"
et pour afficher l'image, dans la vue, j'ajouterais ..
<img src="Images/<%=Model.ImageURL %>.jpg" />