2009-09-18 10 views
0

Je tente de créer un système de thème pour mon application asp.net mvc.Déclaration Dynamic Masterpage - ASP.NET MVC

j'ai pu créer un moteur de vue personnalisée et une classe de contrôleur personnalisé pour changer la vue façon sont sortie.

Ma question est MasterPages. Est-il possible de le faire suivant: Ceci est la directive @Page de la vue

<%@ Page Title="" Language="C#" 
MasterPageFile="<%= ViewData["myThemeFolder"] + "/Views/Shared/Site.Master" %>" 
Inherits="System.Web.Mvc.ViewPage" %> 

J'ai essayé de le faire, mais cela ne fonctionne pas. Je voudrais accomplir cela, mais je ne sais pas comment.

Répondre

0

je fini par faire thématisation en utilisant le remplacement de la feuille de style. J'utilise jQuery UI et les thèmes associés de ThemeRoller. Vous pourriez vouloir penser à faire ceci ou quelque chose de similaire comme une alternative au changement de la page maître. Vous pouvez trouver plus d'informations sur comment j'ai fait ceci sur mon blog, où j'ai écrit au sujet d'un plugin de jQuery que j'utilise pour permettre aux gens de changer des thèmes en choisissant essentiellement une feuille de style de thème différente.

+0

Je voudrais avoir plus de contrôle sur le modèle plutôt que le style complètement avec css. – Omar

0

Ce que vous devez faire est de définir cette propriété MasterPageFile à un maître « de base » qui a l'ensemble « standard » des contrôles de contenu sur elle.

ensuite dynamiquement sélectionner le maître de votre contrôleur:

return View(viewName, masterName, modelObject); 

Vous ne pouvez pas gérer cela dans la vue parce que cette partie de la vue n'a pas la moindre idée ce que ViewData est, etc. Il est assez beaucoup une directive de préprocesseur.

Quoi qu'il en soit, ce que vous pouvez faire est l'un des éléments suivants:

1) Ajouter un ThemedView (ou tout ce que vous voulez l'appeler) méthode dans votre base mise en oeuvre du contrôleur, puis revenez que, plutôt que View() pour renvoyez vos ViewResults.

2) Créer un ActionFilterAttribute personnalisé pour échanger dynamiquement la page principale.

De toute façon, vous devez soit utiliser votre nouvelle méthode ou décorer les choses avec le ActionFilterAttribute.

+0

Je ne suis pas vraiment sûr de ce que vous voulez dire. Je ne veux pas avoir à expliciter le nom de masque pour chaque vue que je génère. Ma classe de contrôleur de base définit ViewData ["myThemeFolder"], donc je voudrais qu'il règle automatiquement la page maître – Omar

+0

Ce serait la manière "plus élégante" de le gérer. Comme la création d'une méthode ThemedView dans la classe de base qui effectue un pointage dans le nom de la page maître. –

+0

Si je prenais cette approche, j'en aurais besoin pour environ 50-60 actions, pas très faisable pour ce dont j'ai besoin. Si j'étais capable d'utiliser les données de vue dans la directive @Page, tout irait bien. – Omar

Questions connexes