2010-12-15 59 views
3

我正在使用MVC3和Razor開發一個相當大的Web應用程序的新區域,其中應用程序的其餘部分是基於ASP.NET 4 Web窗體的。我可以在此應用程序中包含我的MVC組件,以及我需要做些什麼來實現此目的?在Web窗體應用程序中包含MVC 3視圖

回答

3

http://www.packtpub.com/article/mixing-asp.net-webforms-and-asp.net-mvc

這應該讓你在正確的道路上。如果是我個人,但我會添加一個新項目到您的解決方案是MVC,然後您可以在IIS/MVCApp中配置一個虛擬目錄

+0

你將如何配置,如果它被添加到解決方案的新項目只(即/ MVC)的根源在哪裏?認爲這將是有用的信息。 Andi G :) +1 – Andrew 2010-12-15 16:56:39

+1

確保在計劃路由時考慮虛擬目錄URL(例如,'/ mvc'),因爲它們相對於應用而不是虛擬目錄解決。 – 2010-12-15 17:00:21

4

我們的經驗是WebForms和MVC可以很好地兼容在同一個應用程序中,但沒有混合。換句話說,每個頁面可以是WebForms或MVC,但不能很容易地包含兩者的元素。我發現兩個主要的變通辦法是:

  • 讓你的所有MVC元素大量Ajax化,使他們可以動態地通過AJAX頁面加載後加載。
  • 爲了使應用程序的MVC部分具有與WebForms部分相同的外觀和風格,您的主頁面有兩個版本,以及其他任何與您的Web應用程序「通用」的版本。

我們使用後一種方法。

+0

我想我也會使用兩種主文件方法。我擔心不得不在我的aspx母版頁上使用IFrame來託管我的mvc'內容頁面'。 – ProfK 2010-12-15 17:46:19

+0

@ProfK:是的,我們使用iframe解決方案將我們的應用程序整合到用Java編寫的另一個應用程序中,並且這種方法存在更多的痛點。 – StriplingWarrior 2010-12-15 20:33:14

0

我正在使用類似這樣的類將MVC視圖嵌入到webforms頁面中。會嘗試這樣做,在反方向

public class HelperFactory 
{ 
    private class FakeController : Controller 
    { 
    } 

    private class FakeView : IView 
    { 
     public void Render(ViewContext viewContext, TextWriter writer) 
     { 
      throw new NotImplementedException(); 
     } 
    } 

    public static HtmlHelper<TModel> GetHelper<TModel>() 
    { 
     //HttpContextBase context = new HttpContext(HttpContext.Current); 
     FakeController controllerBase = new FakeController(); 
     RouteData rd = new RouteData(); 
     rd.Values.Add("controller", "Fake"); 
     RequestContext requestContext = new RequestContext(new HttpContextWrapper(HttpContext.Current), rd); 
     ControllerContext fakeContext = new ControllerContext(requestContext, controllerBase); 
     ViewDataDictionary vdd = new ViewDataDictionary(); 
     ViewContext viewCtx = new ViewContext(fakeContext, new FakeView(), vdd, new TempDataDictionary(), requestContext.HttpContext.Response.Output); 

     return new HtmlHelper<TModel>(viewCtx, new ViewPage()); 
    } 
} 
相關問題