在Web窗体应用程序中包含MVC 3视图

时间:2010-12-15 16:37:24

标签: asp.net asp.net-mvc asp.net-mvc-3

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

3 个答案:

答案 0 :(得分:4)

我们的经验是,WebForms和MVC在同一个应用程序中并行运行,但并没有混合。换句话说,每个页面可以是WebForms或MVC,但它不能很容易地包含两者的元素。我发现的两个主要解决方案是:

  • 使所有MVC元素都经过大量AJAX化,以便在页面加载后通过AJAX动态加载它们。
  • 有两个版本的母版页,以及Web应用程序的“常用”,使应用程序的MVC部分具有与WebForms部分相同的外观和感觉。

我们使用后一种方法。

答案 1 :(得分:3)

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

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

答案 2 :(得分: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() );
    }
}