【问题标题】:Include MVC 3 views in a Web Forms application在 Web 窗体应用程序中包含 MVC 3 视图
【发布时间】:2011-05-26 01:02:30
【问题描述】:

我正在使用 MVC3 和 Razor 开发一个相当大的 Web 应用程序的一个新领域,该应用程序的其余部分是基于 ASP.NET 4 Web 窗体的。我可以在这个应用程序中包含我的 MVC 组件吗?我必须做些什么来实现这一点?

【问题讨论】:

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


    【解决方案1】:

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

    • 让所有 MVC 元素高度 AJAX 化,以便在页面加载后通过 AJAX 动态加载它们。
    • 拥有两个版本的母版页,以及 Web 应用程序“通用”的任何其他版本,以使应用程序的 MVC 部分具有与 WebForms 部分相同的外观。

    我们使用后一种方法。

    【讨论】:

    • 我想我也会使用两个主文件的方法。我害怕不得不在我的 aspx 母版页上使用 IFrame 来托管我的 mvc“内容页面”。
    • @ProfK:是的,我们使用 iframe 解决方案将我们的应用程序集成到另一个用 Java 编写的应用程序中,这种方法还有很多痛点。
    【解决方案2】:

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

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

    【讨论】:

    • 如果新项目的根被添加到解决方案中,您将如何仅配置它(即/mvc)?认为这将是有用的信息。安迪 G :) +1
    • 确保在规划路线时考虑到虚拟目录 url(例如 /mvc),因为这些是相对于应用程序而非虚拟目录进行解析的。
    【解决方案3】:

    我正在使用类似这样的类将 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() );
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多