2011-02-17 7 views
4

Microsoft a un nouvel outil d'édition de site Web: WebMatrix. WebMatrix utilise le nouveau moteur de pages Web dans lequel Razor est le moteur de vue; Razor est également le nouveau moteur de vue pour MVC3. J'essaie de savoir s'il est possible d'enregistrer et d'utiliser un moteur de vue différent dans les pages Web (comme vous le pouvez dans MVC).Afficher les moteurs pour les pages Web matricielles Web

Est-ce que quelqu'un sait s'il est possible d'ajouter ou de remplacer le moteur de vue dans les pages Web? Si oui, quelqu'un at-il documenté cela? Exemples?

+0

Quel est le nouveau moteur de pages Web? Ne pouvez-vous pas utiliser MVC et mélanger et faire correspondre? – mellamokb

+0

L'équipe ASP.NET a déclaré (et vous avez confirmé avec Reflector) que les pages Web asp.net ne sont pas techniquement liées à Razor, tout comme MVC3.Cependant, je n'ai pas vu d'exemples sur la façon d'enregistrer quelque chose comme Spark avec des pages web .. et les blogs de l'équipe indiquent qu'ils vont le visiter plus tard. Je vous encourage donc à le faire, mais je ne peux malheureusement pas vous conseiller sur la façon de le réaliser. –

+0

a ajouté une réponse à mon modèle de pensée actuel. Je vais essayer d'accrocher Spark plus tard si je peux trouver du temps. Problème intéressant que vous avez présenté –

Répondre

2

J'espère que d'essayer moi-même un peu plus tard, mais pour l'instant je vais partager mes réflexions actuelles:

dans les pages web, Razor fonctionne en enregistrant un BuildProvider avec le tuyau de génération ASP.NET pour .cshtml et .vbhtml.

WebPages, à son tour, enregistre les extensions .cshtml .vbhtml à son gestionnaire. Lorsqu'une page WebPages est demandée, System.Web.WebPages.WebPageHttpHandler transmet le chemin d'accès au tube de génération, où les extensions sont associées au fournisseur Razor enregistré, qui restitue la page et renvoie un objet WebPage, qui gère passe à IIS et est servi.

Vous verrez tout cela si vous utilisez un outil de réflexion. Les deux sont obtenus dans le PreApplicationStartCode.Start() de l'assembly correspondant.

rasoir accrochage de son fournisseur de construction:

public static void Start() 
{ 
    if (!_startWasCalled) 
    { 
     _startWasCalled = true; 
     BuildProvider.RegisterBuildProvider(".cshtml", typeof(RazorBuildProvider)); 
     BuildProvider.RegisterBuildProvider(".vbhtml", typeof(RazorBuildProvider)); 
    } 
} 

WebPages accrochage du WebPageHandler

public static void Start() 
{ 
    if (!_startWasCalled) 
    { 
     _startWasCalled = true; 
     WebPageHttpHandler.RegisterExtension("cshtml"); 
     WebPageHttpHandler.RegisterExtension("vbhtml"); 
     PageParser.EnableLongStringsAsResources = false; 
     DynamicModuleUtility.RegisterModule(typeof(WebPageHttpModule)); 
     ScopeStorage.CurrentProvider = new AspNetRequestScopeStorageProvider(); 
    } 
} 

Pour passer outre, nous aurions besoin de créer et enregistrer un BuildProvider séparé avec le tuyau d'ASP.NET pour rendre notre pages System.Web.WebPages fournit une méthode WebPageHttpHandler.RegisterExtension() qui, en théorie, vous pouvez raccorder un BuildProvider différent à celui qui obtiendra la requête WebPage au lieu de Razor.

Plusieurs blogs mentionnent la méthode RegisterExtension, mais il existe également un rapport de bogue open connect qui montre qu'il ne fonctionne pas à 100%. Il peut être plus approprié de tout simplement surcharger tout et d'accrocher notre fournisseur de construction à la pipe (n'utilisant pas la méthode). Web.config fournit une construction pour enregistrer buildProviders, donc je vais essayer cela.

<buildProviders> 
    <add extension=".cshtml" type="CustomStuff.CustomBuildProvider"/> 
</buildProviders> 

Le défi est que la plupart des moteurs de vue là-bas utiliser ViewEngines.Register(), un concept qui ne semble pas sur les pages Web d'avoir. Donc, nous devrons envelopper ces moteurs de vue dans un BuildProvider et/ou créer un BuildProvider qui peut invoquer avec succès IViewEngine

Encore une fois, juste partager ma pensée. Je vais essayer d'enregistrer Spark ou quelque chose plus tard si je trouve un peu de temps.

0

Vous ne pouvez pas "enregistrer" les moteurs de vue dans les pages Web de la même manière que MVC. Vous venez de mélanger et de faire correspondre les types de fichiers. Rien ne vous empêche d'ajouter des fichiers .aspx à votre site Web. Les pages Web s'apparentent beaucoup plus à un projet de site Web dans VS.

+0

J'essaie d'ajouter mon propre moteur de vue, pas un .aspx ou un autre type de page actuellement pris en charge. –

+0

Si vous souhaitez utiliser votre propre moteur de vue, vous devez utiliser un framework qui supporte tel que MVC, comme dit mellamokb. Les pages Web ne prennent pas en charge ce type d'extensibilité. –

+0

J'utilise actuellement MVC mais occasionnellement je voudrais un framework plus simple comme WebMatrix + Web Pages. L'utilisation de Reflector sur les pages Web indique que l'enregistrement est en cours, ce qui est logique car Razor est un moteur enregistrable. Les pages Web peuvent être verrouillées sur Razor, je ne sais pas. –

Questions connexes