2010-12-15 97 views
3

Je développe une nouvelle zone d'une application Web assez volumineuse en utilisant MVC3 et Razor, où le reste de l'application est basé sur ASP.NET 4 Web Forms. Puis-je inclure mes composants MVC dans cette application et que dois-je faire pour y parvenir?Inclure les vues MVC 3 dans une application Web Forms

Répondre

3

http://www.packtpub.com/article/mixing-asp.net-webforms-and-asp.net-mvc

Cela devrait vous mettre sur la bonne voie. Si c'était moi personnellement cependant, je voudrais ajouter un nouveau projet à votre solution qui est MVC, vous pouvez alors simplement configurer un répertoire virtuel dans IIS/MVCApp

+0

Comment voulez-vous configurer la racine du nouveau projet uniquement (par exemple/mvc) s'il a été ajouté à la solution? Pensez que ce serait une information utile. Andi G :) +1 – Andrew

+1

Assurez-vous de prendre en compte l'URL du répertoire virtuel (par exemple '/ mvc') lorsque vous planifiez vos itinéraires, car ceux-ci sont résolus par rapport à l'application, et non au répertoire virtuel. –

4

Notre expérience a été que WebForms et MVC fonctionnent bien côte à côte -side dans la même application, mais pas mélangé. En d'autres termes, chaque page peut être WebForms ou MVC, mais elle ne peut pas inclure très facilement les deux. Les deux principales solutions de contournement que j'ai trouvées sont:

  • Faites que tous vos éléments MVC soient fortement AJAXified, afin qu'ils puissent être chargés dynamiquement via AJAX après le chargement de la page.
  • Disposez de deux versions de vos pages maîtres et de toute autre chose «commune» à votre application Web pour que les portions MVC de votre application aient le même aspect et les mêmes sensations que les portions WebForms.

Nous utilisons cette dernière approche.

+0

Je pense que je vais aussi utiliser l'approche de deux fichiers maîtres. J'avais peur d'avoir à utiliser un IFrame sur ma page maître aspx pour héberger mes «pages de contenu» mvc. – ProfK

+0

@ProfK: Oui, nous utilisons une solution iframe pour intégrer notre application dans une autre application écrite en Java, et il y a beaucoup plus de points douloureux à cette approche. – StriplingWarrior

0

J'utilise une classe comme celle-ci pour intégrer une vue MVC dans la page webforms. Va essayer de le faire dans un sens inverse

public class HelperFactory 
{ 
    private class FakeController : Controller 
    { 
    } 

    private class FakeView : IView 
    { 
     public void Render(ViewContext viewContext, TextWriter writer) 
     { 
      throw new NotImplementedException(); 
     } 
    } 

    public static HtmlHelper<TModel> GetHelper<TModel>() 
    { 
     //HttpContextBase context = new HttpContext(HttpContext.Current); 
     FakeController controllerBase = new FakeController(); 
     RouteData rd = new RouteData(); 
     rd.Values.Add("controller", "Fake"); 
     RequestContext requestContext = new RequestContext(new HttpContextWrapper(HttpContext.Current), rd); 
     ControllerContext fakeContext = new ControllerContext(requestContext, controllerBase); 
     ViewDataDictionary vdd = new ViewDataDictionary(); 
     ViewContext viewCtx = new ViewContext(fakeContext, new FakeView(), vdd, new TempDataDictionary(), requestContext.HttpContext.Response.Output); 

     return new HtmlHelper<TModel>(viewCtx, new ViewPage()); 
    } 
}