2008-09-22 4 views
8

새 ViewEngine의 MVC 미리보기 5 변경 사항에 대한 Brad Wilson (http://bradwilson.typepad.com/blog/2008/08/partial-renderi.html)의 게시물을 읽었으며 뷰를 문자열로 렌더링 할 수 있다고 생각했습니다. 테스트에 사용하기 위해. 기사를 통해이 문제를 해결할 수는 있지만 어떻게 해결할 수는 없다는 인상을받습니다.MVC 미리보기 5 - 테스트 용 문자열보기

이것은 우리가 예상 값/텍스트의 문자열을 단순히 검사하여보기가 올바르게 렌더링되었는지 확인할 수 있으므로 Watlow 테스트 (느리고 신뢰할 수 없음)를 제거 할 수 있다고 생각합니다.

누구나 이와 비슷한 것을 구현 했습니까?

답변

5

까다 롭습니다. Response.Filter 속성을 구현하는 사용자 지정 스트림 클래스로 설정하면됩니다. MVC Contrib 프로젝트에는 실제로이를 수행하는 예제가 있습니다. 나는 거기에서 찌르 게 될 것이다.

0

또한 테스트를 통해 HTML에서 PDF 변환기와 같은 구성 요소에 유용 할 수 있습니다. 이러한 구성 요소는 일반적으로 두 가지 변환 방법을 사용합니다. 그래서,

  • html로 내용을 전달 변환 방법
  • 에 URL을 전달 (당신은 선택적으로 가상 경로를 해결하기 위해 base을 지정할 수 있습니다) 내가 컨트롤러 내부의 권한 부여 필터를 사용하고

URL로 리디렉션하면 렌더링 된 HTML이 로그인 페이지 중 하나 (사용자 지정 인증 사용)입니다.

Server.Execute (Url)를 사용하여 컨텍스트를 유지하면 메서드가 실패합니다 (HttpUnhandledException :/Template/Pdf/1에 대한 자식 요청을 실행하는 동안 오류가 발생했습니다).

그래서 렌더링 된 ViewResult의 HTML을 가져 오려고했지만 성공하지 못했습니다.

1

여기 내가 필요한 것 같아요. RenderPartialToString 함수는 컨트롤러를 문자열로 반환합니다. 나는 here에서 그것을 얻는다.

public static string RenderPartialToString(string controlName, object viewData) 
{ 
    ViewDataDictionary vd = new ViewDataDictionary(viewData); 
    ViewPage vp = new ViewPage { ViewData = vd }; 
    Control control = vp.LoadControl(controlName); 

    vp.Controls.Add(control); 

    StringBuilder sb = new StringBuilder(); 
    using (StringWriter sw = new StringWriter(sb)) 
    { 
     using (HtmlTextWriter tw = new HtmlTextWriter(sw)) 
     { 
      vp.RenderControl(tw); 
     } 
    } 

    return sb.ToString(); 
} 
관련 문제