2017-12-29 9 views
0

이 방법을 사용하여 뷰를 html로 렌더링합니다 (pdfs 생성에 필요함). 내가보기에 모델을 변경할 때html로 면도 페이지를 렌더링하려면 다른 모델이 필요합니다.

public static class ControllerContextExtensions 
{ 
    public static string RenderViewToHtml(this ControllerContext context, string viewName, object model) 
    { 
     context.Controller.ViewData.Model = model; 
     using (StringWriter sw = new StringWriter()) 
     { 
      var viewResult = ViewEngines.Engines.FindPartialView(context, 
                  viewName); 

      ViewContext viewContext = new ViewContext(context, viewResult.View, context.Controller.ViewData, context.Controller.TempData, sw); 
      viewResult.View.Render(viewContext, sw); 

      string html = sw.GetStringBuilder().ToString(); 
      string baseUrl = string.Format("{0}://{1}", HttpContext.Current.Request.Url.Scheme, HttpContext.Current.Request.Url.Authority); 
      html = Regex.Replace(html, "<head>", string.Format("<head><base href=\"{0}\" />", baseUrl), RegexOptions.IgnoreCase); 
      return html; 
     } 
    } 

그러나, 항상 문구 Render(viewContext, sw);에서 (실패 부분보기는 타입 B의 모델을 선언에도 불구하고, '이 모델 A를 필요로하지만, 전달 모델은 B 형이다' 참고 :. "ABC"부분보기가 실험으로 picture one 에서 @model InvoiceReportModelItem, 나는 BaseReportViewModel의 자손 타입의 빈 모델을 통과 한 지금은 말한다 내가 이전에 통과하려고 유형의 모델을 필요로 enter image description here

. 문제의 원인이 될 수있는 것은 무엇입니까? 파일 이름 바꾸기 (어쩌면 사전이 캐시되었거나 도움이되지 않았을 수도 있음)

+0

내가 묻는 것은 확실하지 않지만 여러 모델이 포함 된 모델을 사용할 수 있습니다. – Danieboy

+0

@Danieboy, 문제는보기가 BaseReportViewModel (잘못된) 또는 InvoiceReportModelItem ("ABC"보기의 모델로 선언 됨)의 자손도 아니며 요청하는 모델을 허용하지 않는다는 것입니다. – pwrigshihanomoronimo

+1

** abc에 지정된 모델은 무엇입니까? **보기? @Danieboy 다시 예외 메시지를 확인하시기 바랍니다 –

답변

0

그래서이 문제는이보기와 다르지만 레이아웃보기 모델이 다릅니다 ... 네, '부분적으로 레이아웃'입니다. .

내 경우에는 InvoiceReportModelItem 유형의 모델과 레이아웃 - BaseReportViewModel이 있습니다.

+0

이 답변에 대해 더 자세히 알려주십시오. 어떻게 해결 했습니까? – Daniel

+0

@Daniel 내 부분보기는 다른보기 모델 (부분보기의보기 모델 유형! =보기 화면의보기 모델 유형)을 가진 Layout = "/ path/to/layout"을 제공하고있었습니다. 던져진 오류가 일관성이 없다는 것을 보여주지 않기 때문에 모델이 잘못되었다는 것을 알지 못했습니다. – pwrigshihanomoronimo

관련 문제