Question

Ok j'ai un système de menu avec un menu (dynamicly généré à partir d'un champ datavbase) Je veux inclure ce système de menu sur plusieurs vues - qui utilisent des contrôleurs differant et modèles.

<ul>
            <li><a href="#">All</a></li>
                <%
                    foreach (var curCat in Model.CategoryList)
                    {
                %>
                        <li><a href="/messagecentre/category/<%=curCat.CategoryID.ToString() %>"><%= Html.Encode(curCat.Category1)%></a></li>               
                <% 
                   } 
                %>
        </ul>

Whast la meilleure façon d'y parvenir? Ai-je besoin de passer juste le modèle Catégories avec tous les autres modèles afin que je puisse faire le RenderPartial ( « Nom », modèle) Syntax?

Était-ce utile?

La solution

Il existe deux façons d'y parvenir. Vous pouvez inclure les catégories dans tous les modèles ou vous pouvez stocker les catégories dans les ViewDataDictionary et les récupérer à partir de là. Normalement, je voudrais étendre le modèle avec des données afin que je puisse l'utiliser d'une manière fortement typée, mais dans ce cas - puisque les données sont omniprésentes - je serais probablement aller avec ViewData et utiliser un contrôleur de base pour remplir il (probable OnActionExecuted) afin qu'il soit toujours disponible. À mon avis partiel je jetais l'élément ViewData à un objet fortement typé et de l'utiliser à partir de là.

La raison pour laquelle je le faire est de garder mes modèles propres à la vue réelle, qui n'a pas besoin de connaître les données pour le menu. Pour moi, cela semble être une exception raisonnable à l'itinéraire habituel de créer un modèle spécifique à la vue.

<% var categories = ViewData["categories"] as IEnumerable<Category>; %>
<ul>
    <li><a href="#">All</a></li>
        <%
    foreach (var curCat in categories)
    {
%>
        <li><a href="/messagecentre/category/<%=curCat.CategoryID.ToString() %>"><%= Html.Encode(curCat.Category1)%></a></li>               
<% 
   } 
%>
</ul>

Autres conseils

La troisième voie - vérifier les contrats à terme MVC sur CodePlex, plus précisément la méthode de Html.RenderAction. Ensuite, vous pouvez créer un contrôleur qui Ouputs juste le menu et laissez-le gérer est entreprise. Pas besoin de polluer ViewData.

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