2011-06-10 67 views
1

我們有一個服務器控件,我們想在我們的.net MVC應用程序中使用。控件將只是頁面的一部分,我不想重構整個應用程序(包括佈局頁面)來使這一頁工作。所以我相信我的選擇如下。mvc應用程序中的asp.net服務器控件

  • 只要把一切都一個aspx頁面上,並使用路由去那裏,失去了我的佈局頁
  • 使用iframe(跛腳)
  • 使用HttpContext.Current.Server.Execute(URL)(拋出錯誤)
  • 使用HTTP請求來獲取的HTML,然後推到頁面上,比一個iframe更好

所以idealy我想用HttpContext.Current.Server.Execute執行URL,返回的HTML並做所有的服務器端。我只是不斷收到錯誤。該頁面可以從瀏覽器訪問,但路由有時會生效,然後我只是收到「子請求失敗」。

想法?請不要說這是一個壞主意,我已經知道了。我只是想盡力做好最糟糕的情況。

謝謝。

回答

0

我最終讓我的asp.net web表單頁面抓住MVC視圖,並找出把它的內容放在哪裏。這是倒退的方式,但工作和回發工作以及。這是爲具有Action和View的Razor引擎完成的,而不是局部視圖。

var controller = new CalendarController(); 
var routeData = new System.Web.Routing.RouteData(); 
routeData.Values.Add("controller", "CalendarController"); 
controller.ControllerContext = new ControllerContext(new FakeHttpContext(), routeData, controller); 
try 
{ 
    using (StringWriter sw = new StringWriter()) 
    { 
     var viewResult = controller.Index() as ViewResult; 
      var view = ViewEngines.Engines.FindView(controller.ControllerContext, "relative_pathto_view", ""); 
     ViewContext viewContext = new ViewContext(controller.ControllerContext, view.View,    controller.ViewData, controller.TempData, sw); 
     view.View.Render(viewContext, sw); 
     var page = sw.GetStringBuilder().ToString(); 
    } 
} 
catch (Exception ex) 
{ 
    Response.Write(ex.ToString()); 
} 
相關問題