Question

J'ai besoin de la pensée claire de l'esprit pour fournir une bonne idée comment ce genre de chose devrait être fait à son meilleur.

Problème

Je construis une application Asp.net MVC. La plupart de mes vues ont une barre d'outils en haut. Barre d'outils peut avoir plusieurs articles différents sur comme:

    boutons
  • notes
  • éléments de chasse (espace de largeur de dynamique qui est utilisé pour mettre des boutons sur le côté droite de la barre d'outils)
  • etc.

Pour suivre Principe DRY Je créé un ensemble de vues partielles partagées (Toolbar, Toolbar.Button etc.) qui rendent un objet de barre d'outils prédéfinie. Ces vues partielles sont dactylographiées bien sûr fort.

Alors j'ai mes vues fortes de type dont les modèles sont liés aux données qu'ils affichent. Mais ils ont bien souvent une barre d'outils sur eux. Donc, avant d'appeler Html.RenderPartial("Toolbar", toolbar) Je dois préparer cette liste d'objets IList<ToolbarItemBase> de le transmettre à lui.

Le problème est que je me prépare ces derniers dans la vue elle-même. Cette liste d'objets de la barre d'outils est toujours le même pour une page particulière et est également localisée. élément de bouton barre d'outils a également une propriété Url qui est définie à l'aide Url.Action () aide, ce qui rend impossible de stocker simplement des instances de la barre d'outils sérialisés dans une base de données. La chose est ces définitions de la barre d'outils peut être vraiment grand (pensez à ruban Word et la quantité des éléments qu'il contient)

Question

Que proposez-vous, où dois-je créer mes instances de la barre d'outils localisées sans encombrer le code de vues? Comme ils ne changent pas du tout, ils pourraient très probablement deviner statique I ...

Était-ce utile?

La solution

J'envisager d'utiliser les aides d'action / RenderAction dans ASP.NET MVC 3.

En gros l'aide d'action Laissez-vous est mis en place une « demande de l'enfant » à une action de contrôleur qui peut construire un modèle et de rendre une vue partielle (et les résultats de la vue partielle sera rendu dans la vue extérieure où vous utilisez @Html. Action(...)).

Alors ... dans votre scénario vous auriez une action de contrôleur dédié à la construction du modèle de vue de la barre d'outils, et de rendre la barre d'outils partielle. Appelez cette action à l'aide Html.Action de la mise en page ou afficher le contenu qui a besoin d'une barre d'outils.

Hope qui aide,

Autres conseils

Mettre en place un modèle de base pour toutes les vues de la barre d'outils compatibles et préparer les données de la barre d'outils là.

P.S. Je serais probablement me downvoted pour cela, mais avez-vous pensé retourner à WebForms au lieu de MVC? Si votre intention est d'imiter l'interface de l'application de bureau avec toutes ses fonctionnalités et de la complexité, MVC peut ne pas être l'outil pour vous. En un mot, MVC est pour les sites Web, WebForms sont pour les applications web.

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