2017-09-12 1 views
2

Dans ASP.NET MVC, on peut utiliser la propriété suivante pour affecter une page de mise en page locale:cshtml Mise en page à distance

@{ 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

Avec projet local, je veux dire qu'il doit résider dans le même ASP.NET MVC.

Dans notre projet, nous devons être en mesure de partager une page de mise en page à travers différentes solutions qui sont déployées par différentes équipes à des moments différents. Nous devons donc être en mesure d'affecter une page de mise en page à partir d'un emplacement central lors de l'exécution. Nous ne voulons pas que quiconque ait la dernière page de mise en page et la place dans ses projets + déploiement.

Il n'est pas possible d'affecter une URL distante à la propriété layout (ce qui semble logique). Est-ce que quelqu'un a déjà essayé quelque chose comme ça?

Je pensais faire une méthode d'extension de la mise en page de remplacement qui effectue les opérations suivantes (par exemple this.SetRemoteLayout (« [url] »):

  • synchrone requête HTTP bien mises en cache pour aller chercher la page de mise en page à partir d'une centrale application web
  • télécharger la page de mise en page localement afin qu'il puisse être accessible par le chemin relatif par exemple « ~/Vues/Temp/_Layout.cshtml »
  • interne attribuer la propriété de la mise en page avec le chemin relatif du fichier téléchargé

Est-ce que quelqu'un a déjà fait ça?

+0

Je pense que vous pouvez ajouter un « faux » _layout à votre projet, puis créer un événement 'pré-build' qui copie le « réel » _layout sur le faux de votre emplacement désiré. – mxmissile

+0

En outre, vous pouvez utiliser un dossier lié en utilisant la commande "mklink" "mklink -d projectfolder canonicalfolder" (ou même simplement un lien vers le fichier lui-même). Cela pourrait toutefois créer des problèmes dans la gestion de votre contrôle de source. vous voudrez probablement ignorer le contenu lié sauf dans le projet canonique. – theGleep

+0

Les exigences définissent qu'il doit être au moment de l'exécution. Si les changements de mise en page se produisent, le but est que tous les projets ne doivent pas être reconstruits. –

Répondre

0

Nous allons suivre motif suivant:

  • Une DLL centrale est installé dans le GAC avec des aides HTML (gérées par l'équipe de frameworking)
  • Une page de mise en page locale (gérée par des équipes normales) appelleront une aide html pour rendre l'ensemble de la mise en page
  • Nous allons définir/rendre les sections génériques dans les aides html

de ==> Si la mise en page doit changer le code d'assistance DLL central html i s adapté et déployé. Toutes les applications utilisent ensuite automatiquement la mise en page mise à jour sans avoir à redéployer leurs applications.

Voici comment nous pouvons définir des sections dans les aides html:

public static IHtmlString RenderSectionCustom(this HtmlHelper html) 
    { 
     WebViewPage page = html.ViewDataContainer as WebViewPage; 
     var section = page.RenderSection("CustomTop", false); 
     return section == null ? MvcHtmlString.Empty : MvcHtmlString.Create(section.ToHtmlString()); 
    } 

    public static IHtmlString DefineSectionCustom(this HtmlHelper html) 
    { 
     WebViewPage page = html.ViewDataContainer as WebViewPage; 

     page.DefineSection("CustomTop",() => 
     { 
      page.Write(MvcHtmlString.Create(" hello world (custom top section from HTML HELPER)!")); 
     }); 

     return MvcHtmlString.Empty; 
    }