2016-10-13 3 views
0

간단한 면도기 파일 인 _modelTemplate.cshtml과 poco 클래스 모델이 있습니다. 모델을 _modelTemplate.cshtml에 전달하여 HTML 문자열을 렌더링 할 수있게하고 싶습니다.면도기 파일과 poco 클래스의 문자열로 HTML 렌더링

이유 : 저는 기존 WebForms 응용 프로그램에서 작업 중이며 실제로 생성하는 템플릿 엔진으로 razor를 사용하고 싶습니다. WebForms 서버 컨트롤이나 포스트 백이 필요없는 특정 섹션에 대해 HTML을 정리하십시오.

면도칼 파일에 MVC 헬퍼가 필요하지 않으며 간단한 템플릿과 바인딩 모델 만 필요합니다. 면도기를 사용하여 HTML을 생성 한 다음 렌더링 된 문자열을 WebForm의 .aspx 페이지에있는 Literals .Text 속성에 바인딩 할 수 있다고 생각했습니다.

내가 좋아하는 뭔가 생각하고 있어요 :

Lit1.Text = RenderRazorTemplateAsString(razorFilePath, model); 

이 할 수있는 방법이 있습니까를, 또는 뭔가를 구축해야 할 것이다?

+0

controller.ViewData.Model = model; string result = string.Empty; using (StringWriter writer = new StringWriter()) { ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView (controller.ControllerContext, viewName); ViewContext = 새로운 ViewContext (controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, writer); viewResult.View.Render (viewContext, writer); result = writer.ToString(); } – Nathan

+0

또는 단순히 Html.Raw()를 원하십니까? – Nathan

+0

고마워,하지만 네가 뭘하고 있는지 모르겠다. 이것은 MVC 프로젝트가 아니라 WebForms입니다. 난 그냥 poco 모델과 템플릿에서 HTML을 렌더링해야합니다. MVC가없는 Razor를 엔진으로 사용하기를 원합니다. 그래서 필자는 필요할 경우 System.Web.Razor 및 System.Web.WebPages에 대한 참조 만 추가 할 것이라고 생각합니다. –

답변

0

다음 프로젝트를 작성하여이 문제를 해결했습니다.

저는 WebFormsRazor이라는 github에 게시했습니다. 내가 뭘 찾고 있었는지, 단지 마이크로 소프트 레퍼런스를 사용하며, HTML의 한 줄을 렌더링 할 수 있습니다.

Lit1.Text = RazorTemplate.Render(myModel, "template.cshtml"); 

당신의 면도기 템플릿 WebPageBase에서 파생 프로젝트라는 RazorWebPage의 클래스에서 상속해야 하나 단점이있다.

@inherits WebFormsRazor.RazorWebPage<myModel> 

아마 그 제한은 더 나은 코드를 극복하지만, 바인딩 면도기를 사용하기 위해 페이지로 POCO 클래스 모델을 부착 할 수있는 방법을 필요로 할 수있다.

아마도이 방법을 사용하는 것이 훨씬 더 좋은 방법 일 수 있습니다. 그러나 이것이 내가 지금 당장 해결 한 방법이며, 제가 찾고있는 것입니다.

관련 문제