J'ai eu un assez gros ASP.NET site web (pas d'une application web) et je voulais ajouter MVC3. Je n'avais pas d'option pour changer le type de projet, j'ai donc dû aller avec le site web asp.net 4.0).
Je utiliser un autre projet MVC, mais pas tant que c'est propre application web, mais comme un assemblage au sein de mon ancien site web.
Voici un récapitulatif de ce que j'ai fait:
- J'ai créé un nouveau MVC3 application web dans Visual Studio 2010, j'ai utilisé le modèle vide et le moteur de vue Razor.
- Je l'ai ajouté à la solution à mon site web.
- J'ai changé le chemin de sortie pour le montage de la bin local
répertoire le répertoire bin de mon site web.
- J'ai enlevé le "Contenu" et "Scripts" dossiers de l'application MVC. Les deux
le contenu et les scripts sont déjà une partie de mon site web et je peux
référence de ces MVC "pages".
- J'ai enlevé le Mondial.asax.* fichiers du projet. Je suis en utilisant le Global.asax dans le site web.
- J'ai copié les "Vues" de dossiers et sous-dossiers sur le site web. Parce que ce sont des
fichiers réels et ne fait pas partie de l'assemblée, ils ont à l'intérieur du site web
pas le projet qui génère le MVC de l'assemblée.
- À ce point je pouvais avoir supprimé les "Vues", le dossier du projet MVC mais c'est seulement dans ce type de projet que je reçois Visual Studio support pour l'ajout d'un nouveau point de vue. J'ai donc parfois créer une vue ici et sur le site web.
Lors de la modification de la cshtml fichiers dans mon site web, je reçois toujours plein Intellisense.
-
Ajouté le Routage vers le site web. J'ai juste copié un peu de code à partir d'un MVC mondiale.asax dans le monde.asax de mon site web. Nous avons besoin de l'usage:
using System.Web.Mvc;
using System.Web.Routing;
Dans Application_Start nous avons besoin de:
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
Puis ajouter l'habitude des méthodes de routage:
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
// your routes
}
Ajoutez ensuite un peu de choses sur le web.config de votre site web. Dans le système.web sous la compilation, nous avons besoin les ensembles suivants:
<assemblies>
<add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</assemblies>
Au départ, j'ai également ajouté quelques MVC espace de noms pour le web.la configuration, mais il semble bien fonctionner sans eux.
Vous, maintenant, de créer de nouvelles voies dans le Mondial.asax du site web, puis ajouter une manette correspondante dans le projet MVC, puis retour au site web pour ajouter une vue.
Si vous logique est tous dans une assemblée, et les points de vue et le routage est défini dans le site web.
Vous pouvez toujours effectuer le débogage dans les contrôleurs MVC en définissant des points de rupture, mais vous débogage en commençant par le site web.
Si vous utilisez le défaut suggéré route de la MVC:
routes.MapRoute("Default", "{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
un appel à www.mysite.com servira le contenu de la maison contrôleur/vue pas votre ancien
par défaut.aspx page d'accueil, je viens donc de ne pas utiliser cette voie. Si vous avez des itinéraires de conflits avec des physiques de dossiers et de fichiers, l'utilisation de contraintes avec des expressions régulières sur les routes d'exclure de tels conflits.
Même si j'utilise les pages maîtres dans le site web, le html pour la page commune des parties est créé par le code dans une autre assemblée. Je pourrait simplement appeler les mêmes méthodes de mon _ViewStart.cshtml ou mon contrôleur de base.
Jusqu'à présent je n'ai vu aucun point négatif réel sur cette approche.