C'est une bonne question. Je me souviens d'avoir à faire cela est ASP.NET, mais je n'ai pas pensé à cela pour ASP.NET MVC.
Pour ASP.NET MVC, vous pouvez créer un contrôle utilisateur, mais j'aime l'idée d'une méthode d'extension HTMLHelper
. Prenant l'idée de Beseku d'en haut, ce serait la sortie ultime de votre contrôle. La méthode accepterait une collection d'éléments, et à partir de ces éléments, vous seriez alors en mesure de déterminer la page sélectionnée.
- Créez un objet
MenuTab
possédant les propriétés DisplayText, ActionName et ControllerName.
- Créez une extension
System.Web.MVC.HtmlHelper
qui prend une collection de MenuTab
en tant qu'argument, par ex. public static MvcHtmlString TabbedMenu(this HtmlHelper helper, IEnumerable<MenuTab> menuTabs)
. Notez le type de retour de MvcHtmlString
afin qu'il fonctionne à la fois avec response.write et html.encode.
- À l'intérieur du corps de la méthode ci-dessus, vous pouvez voir via le
HtmlHelper
si les pages contrôleur et action actuelles correspondent aux noms de contrôleur et d'action de l'un des MenuTab
passés, et si oui, construisez un ActionLink
qui a un attribut de classe html défini sur votre classe css pour un élément sélectionné.
Exemple d'utilisation en vous page maître serait quelque chose comme:
<%: Html.TabbedMenu(new List<MenuTab> { new MenuTab{Text="Home", ActionName="Index", ControllerName="Home"}, new MenuTab{Text="Other Page", ActionName="Index", ControllerName="Other Controller"}, new MenuTab{Text="What is this?", ActionName="About", ControllerName="Home"} }) %>
dans celui que je me sers, je passe en outre dans un paramètre id pour que je puisse avoir plusieurs menus sur la même page (pensez à la navigation latérale et supérieure).
Est-ce que c'est une sorte de javascript? – NibblyPig
vous pouvez utiliser jscript mais vous pouvez également utiliser les variables de votre langue. Y at-il un moyen de savoir quel contrôleur vous êtes? quelque chose comme controller.controller_name? peut-être vous pouvez ajouter asp.net comme un tag afin que les gens qui le connaissent puissent aussi aider :) – corroded