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:
.aspx
fichiers et comment dois-je configurer mes itinéraires?.aspx
pages à utiliser ~/Shared/_Layout.chtml
en tant que page maître ? 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!
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:
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() ); %>
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:
J'espère que cela aidera quelqu'un plus tard.