我们有一些旧的ASP.NET Forms页面和新的MVC视图和部分视图在同一个解决方案中。网站上的某些页面是MVC,而遗留页面是Forms。其中一个遗留的Forms页面是一个.ascx
控件。
我是否有办法将MVC部分视图(.ascx
)插入到这个Forms .ascx
控件中?
我们有一些旧的ASP.NET Forms页面和新的MVC视图和部分视图在同一个解决方案中。网站上的某些页面是MVC,而遗留页面是Forms。其中一个遗留的Forms页面是一个.ascx
控件。
我是否有办法将MVC部分视图(.ascx
)插入到这个Forms .ascx
控件中?
我使用这种技术将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 环境中广泛使用此技术,效果非常好!
祝愉快!
不,没有,因为您没有所需的Html助手来执行此插入操作:
<%= Html.RenderPartial("foo") %>
此外,您的MVC部分是强类型的(不是吗),您将无法访问模型。
另外,当您将传统的WebForms应用程序迁移到ASP.NET MVC时,应该反过来做。
从技术上讲,这是可能的,但你需要绕过一些障碍才能实现你所要求的。你需要创建一个虚拟控制器环境、视图环境和相关环境,然后在你页面的后端代码中创建一个属性来模拟模型。
如果你需要详细的说明或示例,请告诉我。
System.Web.ViewPage
的一个属性,因此命名空间的引入技巧只是当您编写自定义助手来扩展 HtmlHelper 时使用的,但是这假定您已经有对它的引用,在 Class Web Form 中不是这种情况。 - Darin Dimitrov