我们在同一解决方案中有旧的ASP.NET Forms页面和新的MVC视图和部分视图.网站上的一些页面是MVC,遗留页面是表格.其中一个旧的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"); %>
其中第二个参数是你的’模型’.
我在混合的MVC / Webforms环境中广泛使用这种技术,它就像一个梦想!
请享用