在ASP.NET Forms页面中包含MVC局部视图

时间:2010-09-07 21:51:31

标签: asp.net-mvc forms webforms partial-views

我们在同一解决方案中有旧的ASP.NET Forms页面和新的MVC视图和部分视图。网站上的一些页面是MVC,遗留页面是表格。其中一个遗留表单页面是.ascx控件。

我有什么方法可以将MVC局部视图(.ascx)插入此表单.ascx控件中吗?

3 个答案:

答案 0 :(得分:2)

我使用这种技术将MVC部分嵌入到webforms页面中。不确定它是否适用于webforms用户控件,但应该可以。

步骤1.在应用程序的MVC部分中,创建以下辅助函数。这做了所有艰苦的工作:

namespace MvcApplication
{
    // create a dummy controller
    public class DummyController : Controller
    {
    }

    public static class MvcPartialHelper
    {
        public static void RenderPartial(string partialViewName, object model)
        {
            ControllerContext controllerContext;
            HttpContextBase httpContextBase;
            IView view;
            RouteData routeData;
            ViewContext viewContext;

            httpContextBase = new HttpContextWrapper(HttpContext.Current);
            routeData = new RouteData();
            routeData.Values.Add("controller", typeof(DummyController).Name);
            controllerContext = new ControllerContext(new RequestContext(httpContextBase, routeData), new DummyController());
            view = ViewEngines.Engines.FindPartialView(controllerContext, partialViewName).View;
            viewContext = new ViewContext(controllerContext, view, new ViewDataDictionary { Model = model }, new TempDataDictionary(), httpContextBase.Response.Output);
            view.Render(viewContext, httpContextBase.Response.Output);
        }
    }
}

然后,在您的网页(或用户控件)中:

添加以下内容以引用上述内容:

<%@ Import Namespace="MvcApplication" %>

然后当您需要显示部分内容时,您可以添加以下内容:

<% MvcPartialHelper.RenderPartial("~/views/shared/TestPartial.ascx", "hello - this is my model"); %>

其中第二个参数是'Model'。

我在混合的MVC / Webforms环境中广泛使用这种技术,它就像一个梦想!

享受

答案 1 :(得分:0)

不,没有,因为您没有执行此插入所需的Html帮助

<%= Html.RenderPartial("foo") %>

此外,您的MVC部分是强类型的(不是它),您将无法访问该模型。

此外,当您将旧版webforms应用程序迁移到ASP.NET MVC时,它应该是相反的。

答案 2 :(得分:0)

技术上有可能,虽然你需要跳过一些箍来实现你的要求。您需要创建一个虚拟控制器上下文,查看上下文和相关环境,然后在页面后面的代码中创建一个属性来模拟模型。

如果您需要详细说明/示例

,请与我们联系