2 votes

Comment partager les pages maîtres entre Razor et Webforms ?

J'ai déjà posé cette question mais le problème est que je n'obtiens qu'une seule réponse et que celle-ci ne correspond pas à la question que j'ai posée. Donc, pour que ce soit clair, dès le départ, ce que cette question ne concerne pas :

JE NE VEUX PAS UTILISER HYBRID, MVC et Webforms dans le même projet !

Quelqu'un peut-il me fournir un lien qui montre deux projets fonctionnant côte à côte avec une seule page maîtresse ? L'un des projets est un formulaire Web ASP.Net, contenant la page maîtresse. L'autre projet serait un projet MVC Razor. La page maîtresse fournit des liens vers des pages .aspx et des vues .cshtml. Ces deux projets doivent être en C#. Je dois pouvoir télécharger le code source pour voir par moi-même comment tout cela fonctionne.

La réponse n°1 n'est pas la réponse que je cherche. Ma question est très spécifique.

3voto

Ruben Points 8393

Pour autant que je sache, ce n'est pas possible pour deux raisons :

  • Vous ne pouvez pas utiliser une page .master depuis l'extérieur de l'application. Elle doit faire partie de l'application (soit sous la forme d'un fichier, soit sous la forme d'une ressource intégrée d'une bibliothèque combinée à une astuce de VirtualPathProvider).
  • Vous ne pouvez pas utiliser une page maître à partir d'un fichier .cshtml, tout comme vous ne pouvez pas utiliser un fichier de mise en page .cshtml à partir d'une page .aspx comme fichier de page maître.

La réutilisation directe de votre page .master existante ne semble donc pas possible.

2voto

ivowiblo Points 5455

Puisqu'il s'agit de deux technologies différentes, vous ne pourrez pas utiliser la même fichier . Vous devrez avoir une MasterPage pour votre application WebForms et un Layout pour votre application MVC qui auront la même apparence.

Si votre MasterPage/Layout n'a pas de contenu dynamique et qu'il s'agit simplement de html, je pense que vous pourriez l'avoir dans un fichier et créer un script qui crée les fichiers MasterPage et Layout à partir de celui-ci, mais je ne pense pas que cela en vaille la peine.

1voto

Antarr Byrd Points 2498

Je ne peux pas vous montrer les sources complètes. Ce n'est pas à moi de les montrer. Mais je peux vous montrer ceci. C'est un partiel que nous utilisons pour rendre les vues razor en utilisant une page WebForm Master.

---razorview.aspx---

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <% Html.RenderPartial((string) ViewBag._ViewName); %>
</asp:Content>
<asp:Content ID="scriptContent" ContentPlaceHolderID="ScriptContent" runat="server">

</asp:Content>

---utilisation---

 public ActionResult Create(int clientId)
 {
....
return this.RazorView(choices); 

---site.master(redacted)---

<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" %>

<%@ Import Namespace="...." %>
<!DOCTYPE html>
<html>
<head id="Head1" runat="server">
    <title>Some Alt</title>
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />   
    <link href="../../Site.css" rel="stylesheet" type="text/css" />
    <asp:ContentPlaceHolder ID="ScriptContent" runat="server" />
    <meta http-equiv="Pragma" content="no-cache" />
    <meta http-equiv="Expires" content="-1" />
</head>
<body>
    <div class="page">
        <div id="main">
            <table width="100%">
                <tr>
                    <td valign="top" width="150" height="50">
                        <img src="<%= Common.CompanyLogoPath%>" alt="Some Alt width="150"
                            height="50" />
                    </td>
                    <td align="left" width="630" height="50" class="mainheading">
                        Description
                    </td>
                    <td align="right" valign="bottom">
                        <%= DateTime.Now.FormatShortDate() %>
                    </td>
                </tr>
                <tr>
                    <td colspan="3">
                        <hr />
                    </td>
                </tr>
                <tr>
                    <td valign="top" class="rightBorder">
                        <table>
                           .....
            </table>
        </div>
    </div>
</body>
</html>

1voto

Milimetric Points 7539

Scott Hanselman, comme d'habitude, a quelques options pour cela. Vous pouvez le faire, mais ce n'est pas joli :

http://www.hanselman.com/blog/MixingRazorViewsAndWebFormsMasterPagesWithASPNETMVC3.aspx

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X