2011-08-05 5 views
2

대규모 ASP.NET WebForms 응용 프로그램을 ASP.NET MVC3으로 마이그레이션하는 과정에서 누군가가 우리를 도울 수있는 작은 걸림돌을 맞았습니다.WebForms에서 ASP.NET MVC3 영역 호출

우리는 MVC3으로 마이그레이션 할 때까지는 WebForms 구현으로 유지해야하는 사이트의 일부를 가지고 있습니다. MVC3은이를 구현하기 위해 사이트를 성공적으로 하이브리드 화했습니다.

그러나 WebForms 페이지에있는 기존 UserControl 구현 중 일부를 새 MVC3 영역 구현을 통해 생성해야하는 내용으로 바꿀 수 있어야합니다. 영역 구현 - MVC3 영역을 실행하는 방법이 있습니까? 고전적인 WebForms 페이지에서?

답변

3

을;

@Html.Action("Index", "Home", new { Area = "HelloWorld" }) 

더미 컨트롤러가 필요합니다 :

public class WebFormController : Controller { } 

우리는 다음 ControllerContext을 얻을 수있는 대답은 표준 Html.Action 확장 방법을 사용하여 필요한 영역을 호출하는 부분보기를 할 것 같다 우리의 더미를 사용하여 거기에서 우리는 부분보기를 얻을하고 렌더링 할 수 있습니다

public class WebFormMvcUtil 
{ 
    public static string RenderPartial(string partialName, object model) 
    { 
     var httpContextWrapper = new HttpContextWrapper(HttpContext.Current); 

     var routeData = new RouteData(); 
     routeData.Values.Add("controller", "WebFormController"); 

     var controllerContext = new ControllerContext(new RequestContext(httpContextWrapper, routeData), 
                 new WebFormController()); 

     IView view = ViewEngines.Engines.FindPartialView(controllerContext, partialName).View; 

     ViewContext viewContext; 
     var stringBuilder = new StringBuilder(); 
     using (var stringWriter = new StringWriter(stringBuilder)) 
     { 
      viewContext = new ViewContext(controllerContext, view, new ViewDataDictionary {Model = model}, new TempDataDictionary(), stringWriter); 
      view.Render(viewContext, viewContext.Writer); 
     } 

     return stringBuilder.ToString(); 
    } 
} 

이 간단한

을 배치 할 수있는 아래로 비등
<%= WebFormMvcUtil.RenderPartial("_Area", null) %> 

WebForms 페이지에서 필수 영역이 렌더링됩니다.

+0

멋진 아이디어. 정적 RenderPartial 메서드를 속성 Area 및 Model이있는 웹 서버 컨트롤에 배치하면 더 이상 aspx 페이지에 추한 코드 조각이 필요하지 않습니다. – slfan

+0

@Ed - 어떻게 webforms 어플리케이션에'Areas'를 추가 했습니까? 나는 비슷한 상황에 처해 있으며 어떤 통찰력도 인정됩니다. – Nick

0

표시 할 HTML을 수신하기 위해 MVC-3 경로를 호출하는 서버 컨트롤을 만들 수 있습니다. 서버 컨트롤은 수신 된 HTML 코드를 렌더링합니다. WebControl에서 파생되고 Render 메서드를 재정의합니다. 찾을 수있는 서버 컨트롤의 샘플 here.

,이 같은 당신이 WebRequest 개체를 사용할 수있는 MVC-3의 코드를 얻으려면 : 좋아

WebRequest request = WebRequest.Create ("http://www.mypage.com/mvcroute"); 
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
Stream dataStream = response.GetResponseStream(); 
using (StreamReader reader = new StreamReader (dataStream)) 
{ 
    string responseFromServer = reader.ReadToEnd(); 
    // render response to output 
} 
+0

저는 서버 컨트롤을 만드는 것이 좋습니다. 정확히 MVC3 영역을 호출하는 방법을 잘 모르겠습니다. –

+0

고마워요.하지만 같은 요청 범위에서 영역을 실행하는 방법을 찾고 있습니다. 즉, 나는 WebForms 파이프 라인에서 Html.Action (...)을 호출 할 수 있기를 기대하고있다. –

관련 문제