2013-03-12 3 views
12

면도기 뷰를 이메일 전송을위한 일종의 템플릿으로 사용하고 싶습니다. 뷰에 템플릿을 "저장"하고 컨트롤러에 문자열로 읽어 들이고 필요한 대체 작업을 한 다음 보내십시오. 그것.면도기 뷰를 문자열로 변환하는 방법은 무엇입니까?

해결 방법 : 내 템플릿이 HTML 페이지로 호스팅되어 있지만 내 응용 프로그램 (내보기)에 넣고 싶습니다. 컨트롤러에서 뷰를 문자열로 읽는 법을 모르겠습니다.

답변

17

다음을 사용합니다. 모든 컨트롤러에서 액세스 할 수있는 방식으로 기본 컨트롤러에 배치하십시오.

public static string RenderPartialToString(Controller controller, string viewName, object model) 
{ 
    controller.ViewData.Model = model; 

    using (StringWriter sw = new StringWriter()) 
    { 
     ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewName); 
     ViewContext viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw); 
     viewResult.View.Render(viewContext, sw); 

     return sw.GetStringBuilder().ToString(); 
    } 
} 
+0

최근 매우 비슷한 썼다. 통증이 $$ –

+0

@DaveA Hehe 예, 고통이 정말 쉽습니다. – mattytommo

+0

.NET CORE로 어떻게 동일한 작업을 수행 할 수 있습니까? –

6

정확히 원하는 것을 수행하는 RazorEngine 라이브러리를 살펴보십시오. 이전에 이메일 템플릿 용으로 사용해 왔지만 훌륭하게 작동합니다.

당신은 같은 것을 할 수 있습니다

// Read in your template from anywhere (database, file system, etc.) 
var bodyTemplate = GetEmailBodyTemplate(); 

// Substitute variables using Razor 
var model = new { Name = "John Doe", OtherVar = "Hello!" }; 
var emailBody = Razor.Parse(bodytemplate, model); 

// Send email 
SendEmail(address, emailBody); 
+0

이것은 유용하지만 변경하고 싶지 않은 코드가 이미 있습니다. 내가보기에 내 템플릿 (HTML)을 저장하고 문자 그대로보기에서 html을 문자열로 읽고 컨트롤러에서 대체 작업을 수행하고 싶습니다. –

+0

알기. 나는 네가 과거에 해왔 던 일을 해냈다. 그러나 RazorEngine 라이브러리를 발견하고 나면 템플릿 파싱을보다 쉽게 ​​개발할 수있을뿐 아니라 템플릿을 훨씬 쉽게 유지할 수 있습니다. 템플릿을 데이터베이스에 저장하거나 코드를 편집하지 않고 편집 할 수있는 곳에 저장할 수 있습니다. –

관련 문제