2010-12-15 58 views
3

我正在使用MVC3和Razor开发一个相当大的Web应用程序的新区域,其中应用程序的其余部分是基于ASP.NET 4 Web窗体的。我可以在此应用程序中包含我的MVC组件,以及我需要做些什么来实现此目的?在Web窗体应用程序中包含MVC 3视图

回答

3

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

这应该让你在正确的道路上。如果是我个人,但我会添加一个新项目到您的解决方案是MVC,然后您可以在IIS/MVCApp中配置一个虚拟目录

+0

你将如何配置,如果它被添加到解决方案的新项目只(即/ MVC)的根源在哪里?认为这将是有用的信息。 Andi G :) +1 – Andrew 2010-12-15 16:56:39

+1

确保在计划路由时考虑虚拟目录URL(例如,'/ mvc'),因为它们相对于应用而不是虚拟目录解决。 – 2010-12-15 17:00:21

4

我们的经验是WebForms和MVC可以很好地兼容在同一个应用程序中,但没有混合。换句话说,每个页面可以是WebForms或MVC,但不能很容易地包含两者的元素。我发现两个主要的变通办法是:

  • 让你的所有MVC元素大量Ajax化,使他们可以动态地通过AJAX页面加载后加载。
  • 为了使应用程序的MVC部分具有与WebForms部分相同的外观和风格,您的主页面有两个版本,以及其他任何与您的Web应用程序“通用”的版本。

我们使用后一种方法。

+0

我想我也会使用两种主文件方法。我担心不得不在我的aspx母版页上使用IFrame来托管我的mvc'内容页面'。 – ProfK 2010-12-15 17:46:19

+0

@ProfK:是的,我们使用iframe解决方案将我们的应用程序整合到用Java编写的另一个应用程序中,并且这种方法存在更多的痛点。 – StriplingWarrior 2010-12-15 20:33:14

0

我正在使用类似这样的类将MVC视图嵌入到webforms页面中。会尝试这样做,在反方向

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()); 
    } 
} 
相关问题