ASP.Net MVC et RenderPartial w / chemins relatifs

J'ai été jouer avec ASP.NET MVC et avait une question. Ou peut-être de son inquiétude que je fais c'est mal. Juste à travailler sur une lame de site pour étirer mes ailes un peu. Je suis désolé, cette question n'est pas du tout concis.

Ok, voici le scénario. Lorsque l'utilisateur visite à domicile/index, la page doit afficher une liste de produits et une liste d'articles. Le format du fichier est telle (DAL est ma couche d'accès aux données):

Contrôleurs 
La maison 
Index 

Vues 
La maison 
Index hérite de ViewPage 
Produit 
Liste hérite de ViewUserControl<IEnumerable<DAL.Produit>> 
Seul hérite de ViewUserControl<DAL.Produit> 
L'Article 
Liste hérite de ViewUserControl<IEnumerable<DAL.L'Article>> 
Seul hérite de ViewUserControl<DAL.L'Article> 
Controllers.HomeController.Index produces a View whose ViewData contains two entries, a IEnumerable<DAL.Product> and a IEnumerable<DAL.Article>.

View.Home.Index will use those view entries to call:
Html.RenderPartial("~/Views/Product/List.ascx", ViewData["ProductList"])
and Html.RenderPartial("~/Views/Article/List.ascx", ViewData["ArticleList"])

View.Product.List will call
foreach(Product product in View.Model)
    Html.RenderPartial("Single", product);

View.Article.List does something similar to View.Product.List

Cette approche ne parvient pas cependant. La démarche fait sens pour moi, mais peut-être quelqu'un avec plus d'expérience avec ces MVC plateformes de reconnaître une meilleure façon.

Ci-dessus produit une erreur à l'intérieur de la Vue.Produit.Liste. L'appel à Html.RenderPartial("Single",...) se plaint que "Seule" vision n'a pas été trouvé. L'erreur indique:

La vue partielle "Unique" n'a pas pu être trouvé. Les emplacements suivants ont été recherchés: 
~/Views/Home/Unique.aspx 
~/Views/Home/Unique.ascx 
~/Views/Shared/Unique.aspx 
~/Views/Shared/Unique.ascx 

Parce que j'ai été appeler RenderAction() à partir d'une vue du Produit, je m'attendais à l'exécution de regarder pour le "Simple" affichage dans les Vues\Produit. Il semble cependant que la recherche est relative: le contrôleur qui a invoqué la vue d'origine (/Contrôleur/Home invoquées /Vues/Produit) plutôt que de la vue actuelle.

Donc je suis en mesure de résoudre ce problème en changeant Vues\Produit, telles que:

View.Product.List will call
foreach(Product product in View.Model)
    Html.RenderPartial("~/Views/Product/Single.ascx", product);

au lieu de

View.Product.List will call
foreach(Product product in View.Model)
    Html.RenderPartial("Single", product);

Ce correctif fonctionne mais.. je ne comprends pas pourquoi j'ai besoin de spécifier le chemin complet de la vue. Il serait logique pour moi pour le nom relatif à interpréter par rapport à la vue actuelle du chemin plutôt que le contrôleur d'origine du chemin de la vue. Je ne vois pas de cas utile lorsque l'interprétation du nom par rapport au contrôleur de la vue au lieu de la vue en cours est utile (sauf dans le cas typique où ils sont les mêmes).

Autour de ce temps, je devrais avoir un point d'interrogation? Pour l'accent c'est vraiment une question.

source d'informationauteur Frank Schwieterman