정기적 인 웹 양식 (Faking ControlLerContext)에서 MVC 작업 결과를 사용하는 방법은 무엇입니까?
-
06-07-2019 - |
문제
우리는 반환하는 플러그 가능한 프레임 워크를 가지고 있습니다 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에 제공하도록 코드를 변경하면 괜찮을 것입니다.
제휴하지 않습니다 StackOverflow