정기적 인 웹 양식 (Faking ControlLerContext)에서 MVC 작업 결과를 사용하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1613088

문제

우리는 반환하는 플러그 가능한 프레임 워크를 가지고 있습니다 ActionResult 브라우저에 물건을 렌더링하는 객체. 늦게 깨는 요구 사항 중 하나는 일반 ASP.NET 웹 양식 응용 프로그램에서 플러그인을 호출해야한다는 것입니다.

지금까지 나는 이것을 생각해 냈습니다. 이것은 매우 기본적인 액션 소식에 효과가 있습니다.

public class ActionResultTranslator {

    HttpContextBase _context;

    public ActionResultTranslator(HttpContextBase context ) {

        _context = context;
    }

    public void Execute(ActionResult actionResult) {

        ControllerContext fakeContext = new ControllerContext();
        fakeContext.HttpContext = _context;            

        actionResult.ExecuteResult(fakeContext);        
    }
}

위의 위에서 웹 양식에서 다음을 호출합니다.

protected void Page_Load(object sender, EventArgs e) {
   HttpContextWrapper contextWrapper = new HttpContextWrapper(this.Context);
   var translator = new ActionResultTranslator(contextWrapper);
   translator.Execute(new RedirectResult("http://google.com"));     
}

모든 것을 연결하기 위해 무엇을해야합니까? 예를 들어, ViewResult를 반환하고 싶다면 어떻게해야합니까?

도움이 되었습니까?

해결책

ControlLerContext에는 속성이 너무 많지 않습니다.

  • httpcontext - 당신은 이것을 다루었습니다
  • 제어 장치 - 내가 알 수있는 한, 표준 action -results are this null이라도 관리하지 않음
  • requestContext -Null이 남은 경우 자동으로 채워집니다
  • Routedata -Null이 남은 경우 빈 컬렉션으로 채워집니다.

따라서 ActionResult가 Routedata에 존재하는 임의의 키에 의존 할 수 있다고 걱정해야합니다. 뷰어는 당신이 채우는 한 행복해야합니다. 동작 그리고 제어 장치 보기 파일을 찾을 위치를 알 수 있도록. 해당 값을 Routedata에 제공하도록 코드를 변경하면 괜찮을 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top