2010-09-07 206 views
4

在同一個解決方案中,我們已經有了舊的ASP.NET窗體頁面和新的MVC視圖和局部視圖。網站上的一些頁面是MVC,而傳統頁面是表單。ASP.NET MVC:在ASP.NET Forms中包含MVC局部視圖頁面

其中一個遺留的Forms頁面是.ascx控件。有沒有什麼辦法讓我在這個Forms .ascx控件中插入一個MVC局部視圖(.ascx)?

回答

2

我使用這種技術嵌入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環境中廣泛使用這種技術,它像夢一樣工作!

享受

0

沒有,是不是因爲你沒有執行此插入所需的HTML輔助:

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

而且你的MVC部分是強類型(是不是),你贏了無法訪問模型。

另外,當您將舊版webforms應用程序遷移到ASP.NET MVC時,它應該是相反的。

+0

我不能僅僅只包含的HtmlHelper的命名空間? – foobarbarfoo 2010-09-07 21:54:26

+0

'Html'是'System.Web.ViewPage'的一個屬性,所以命名空間的包含*技巧*僅在您編寫擴展HtmlHelper的自定義幫助程序時纔有效,但是這假設您已經有了對它的引用,而不是這種情況在一個類web表單中。 – 2010-09-07 21:56:15

0

從技術上講,儘管你需要跳過一些箍環來實現你所要求的,但也有可能。您需要創建一個虛擬控制器上下文,查看上下文和相關環境,然後在代碼後面的頁面中創建一個屬性以模擬模型。

讓我知道,如果你想詳細說明/例子

+0

是的,你有鏈接可以指向我嗎?漂亮請:) – foobarbarfoo 2010-09-07 23:44:45