在同一個解決方案中,我們已經有了舊的ASP.NET窗體頁面和新的MVC視圖和局部視圖。網站上的一些頁面是MVC,而傳統頁面是表單。ASP.NET MVC:在ASP.NET Forms中包含MVC局部視圖頁面
其中一個遺留的Forms頁面是.ascx控件。有沒有什麼辦法讓我在這個Forms .ascx控件中插入一個MVC局部視圖(.ascx)?
在同一個解決方案中,我們已經有了舊的ASP.NET窗體頁面和新的MVC視圖和局部視圖。網站上的一些頁面是MVC,而傳統頁面是表單。ASP.NET MVC:在ASP.NET Forms中包含MVC局部視圖頁面
其中一個遺留的Forms頁面是.ascx控件。有沒有什麼辦法讓我在這個Forms .ascx控件中插入一個MVC局部視圖(.ascx)?
我使用這種技術嵌入MVC諧音成web表單頁面。不知道它是否可以在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環境中廣泛使用這種技術,它像夢一樣工作!
享受
沒有,是不是因爲你沒有執行此插入所需的HTML輔助:
<%= Html.RenderPartial("foo") %>
而且你的MVC部分是強類型(是不是),你贏了無法訪問模型。
另外,當您將舊版webforms應用程序遷移到ASP.NET MVC時,它應該是相反的。
從技術上講,儘管你需要跳過一些箍環來實現你所要求的,但也有可能。您需要創建一個虛擬控制器上下文,查看上下文和相關環境,然後在代碼後面的頁面中創建一個屬性以模擬模型。
讓我知道,如果你想詳細說明/例子
是的,你有鏈接可以指向我嗎?漂亮請:) – foobarbarfoo 2010-09-07 23:44:45
我不能僅僅只包含的HtmlHelper的命名空間? – foobarbarfoo 2010-09-07 21:54:26
'Html'是'System.Web.ViewPage'的一個屬性,所以命名空間的包含*技巧*僅在您編寫擴展HtmlHelper的自定義幫助程序時纔有效,但是這假設您已經有了對它的引用,而不是這種情況在一個類web表單中。 – 2010-09-07 21:56:15