2010-08-17 2 views
1

Vous essayez de créer une page maître fortement typée avec une navigation à plusieurs niveaux et vous aimeriez connaître votre opinion.asp.net mvc navigation sur les meilleures pratiques de la page maquette

J'utilise l'échantillon recommandé par MS ici: http://www.asp.net/mvc/tutorials/passing-data-to-view-master-pages-vb

donc j'ai un ApplicationController qui obtient toutes les catégories et tous les autres contrôleur hérite. et il retourne un LISTE et le stocke dans ViewData ["Nav"]

La page maître en tant que vue partielle qui obtient le modèle NAV et crée le menu. roués pour la catégorie Catégorie/{CategoryId}/{CategoryName}/{page}

La question est de savoir comment puis-je afficher la catégorie sélectionnée ou sous catégorie choisie comme quand je le rend à l'intérieur du PartialView.

Je vois quelques options: 1. Créer une autre propriété dans le contrôleur applicatin:

public class CategoryController : AppliactionController 
{ 
    // 
    // GET: /Category/ 

    public ActionResult Index(string categoryId, string categoryName, int page) 
    { 
     base.ActiveCategoryId=int.parse(categoryId); 
     return View(); 
    } 
  1. Vérifiez l'URL d'action en cours dans la vue partielle lors de la création du menu et définir la catégorie comme sélectionnée si elle produit la même URL d'action (je ne sais pas si je peux obtenir le categoryid de l'action)

Des suggestions?

Répondre

0

Si vous utilisez le modèle de contrôleur maître, l'option 1 est une solution appropriée. Pour une séparation encore meilleure, vous pouvez envisager de déplacer cette logique dans l'action dans un filtre d'action. Je voudrais éviter complètement l'option 2, car vous ne voulez pas ce genre de logique dans votre vue.

Une troisième option que vous pouvez essayer est de ne pas utiliser le modèle de contrôleur maître, et à la place configurer votre vue pour appeler RenderAction s sur les choses qui est orthogonal à la préoccupation principale de la vue. Dans ce cas, votre vue devrait ressembler à Html.RenderAction("Menu", Model.CurrentCategoryId)

+0

Salut, Merci pour la réponse rapide, Pouvez-vous préciser plus en ce qui concerne le déplacement de la logique à un filtre d'action? (Migration à partir de WebForms ..) Merci encore! – tomer

0

En ce qui concerne votre segmentation: "vous pouvez envisager de déplacer cette logique dans l'action dans un filtre d'action."

Je pourrais le faire mais est-il possible d'accéder au contrôleur de boîtier de contrôleur à partir du filtre d'action?

devrait-il être quelque chose comme

public void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
    ((AppController)filterContext.Controller.base)).ActiveCategoryId=int.parse(filterContext.ActionParameters["CategoryId"]) 

n'a pas vérifié le code, je voulais juste entendre vos pensées, est-ce que vous suggérez?

Merci

Questions connexes