web-dev-qa-db-fra.com

Comment ajouter des pages .aspx au projet MVC 4 existant?

Je travaille sur le projet ASP.NET MVC 4. Je veux ajouter à ce projet MVC 2 .aspx pages d'un autre projet WebForms. J'ai plusieurs questions:

  1. Où dois-je copier ce .aspx fichiers et comment dois-je configurer mes itinéraires?
  2. Comment dois-je le dire .aspx pages à utiliser ~/Shared/_Layout.chtml en tant que page maître ?
  3. De plus, cela . Pages aspx utilise . Contrôles ascx . Où dois-je les stocker?
  4. Comment modifier le fichier web.config?

J'ai regardé la liens publiée dans cette question, mais ils semblaient dépassés. De nombreux liens expliquent comment ajouter MVC à WebForms, mais je cherche tout autour.

Tout lien utile serait apprécié. Merci!

12
Shukhrat Raimov

La solution:

Il s'est avéré que l'ajout de pages . Aspx aux pages existantes [~ # ~] mvc [~ # ~] projet est une tâche encore plus facile à accomplir que l'ajout de mvc à .aspx. La chose la plus intéressante pour moi a été de découvrir que les formulaires Web et MVC, dans le cadre d'un partage de projet un runtime sur IIS.

Alors ce que j'ai fait:

  1. Ajout de . Pages aspx d'un autre projet à la racine de mon [~ # ~] mvc [~ # ~] projet
  2. Création d'une nouvelle page maître pour mes pages Webforms (clic droit sur le projet-> ajouter-> nouvel élément-> Page maître)
  3. Afin de créer la page maître de WF et _ Layout.chtml de MVC partagent le même Master 'View' J'ai trouvé ce grand article qui vous permet de appeler quelque chose de similaire à @ méthode Html.RenderPartial () dans . page aspx
  4. Le code suivant fournit des informations sur la façon d'implémenter la méthode RenderPartial dans WebForms:

    public class WebFormController : Controller { }
    
    public static class WebFormMVCUtil
    {
    
        public static void RenderPartial( string partialName, object model )
        {
            //get a wrapper for the legacy WebForm context
            var httpCtx = new HttpContextWrapper( System.Web.HttpContext.Current );
    
            //create a mock route that points to the empty controller
            var rt = new RouteData();
            rt.Values.Add( "controller", "WebFormController" );
    
            //create a controller context for the route and http context
            var ctx = new ControllerContext( 
            new RequestContext( httpCtx, rt ), new WebFormController() );
    
            //find the partial view using the viewengine
            var view = ViewEngines.Engines.FindPartialView( ctx, partialName ).View;
    
            //create a view context and assign the model
            var vctx = new ViewContext( ctx, view, 
                new ViewDataDictionary { Model = model }, 
                new TempDataDictionary() );
    
            //render the partial view
            view.Render( vctx, System.Web.HttpContext.Current.Response.Output );
        }
    
    }
    

    Ajoutez-le à codebehind.cs de votre page .aspx. Ensuite, vous pouvez l'appeler à partir des formulaires Web comme ceci:

    <% WebFormMVCUtil.RenderPartial( "ViewName", this.GetModel() ); %>
    
  5. Comme je n'avais que le "menu" partagé entre toutes mes pages, je l'ai ajouté à la vue partielle, puis je l'ai appelé dans _ Layout.chtml

    @Html.Partial("_Menu")
    

et dans MasterPage.Master comme ceci:

    <% WebFormMVCUtil.RenderPartial("_Menu", null ); %>

C'est tout ce qu'il y a à faire. En conséquence, mon _ Layout.chtml et MasterPage.Master utilisent le même vues partielles partagées. Et je peux accéder aux pages . Aspx simplement en naviguant dessus. Si vous rencontrez des problèmes avec le système de routage, vous pouvez ajouter routes.IgnoreRoute("{resource}.aspx/{*pathInfo}"); à votre routeConfig dans App_Start.

Sources que j'ai utilisées:

  1. Combinez asp net mvc avec des formulaires Web
  2. Mélange de formulaires Web et ASP.NET MVC
  3. MixingRazorViewsAndWebFormsMasterPages
  4. Comment inclure une vue partielle dans un formulaire Web

J'espère que cela aidera quelqu'un plus tard.

17
Shukhrat Raimov