2011-02-08 71 views
2

我想要一個用於電子郵件的html模板。我想傳遞一個模型,讓它渲染並返回一個字符串變量。ASP.NET MVC將模型傳遞到沒有controllerContext的html模板

我該如何做到這一點?我相信我可以使用隨asp.net mvc提供的渲染。

我不想在我的控制器或使用controllercontext對象內執行此操作。

+1

我一直在嘗試做這件事很長一段時間,我向你保證它可以完成,但解決方案並不容易,感覺有點「髒」。你有沒有看過[NDjango](http://ndjango.org/index.php?title=Njjango_Home)或[DotLiquid](http://dotliquidmarkup.org/)作爲替代方案? – 2011-02-08 16:01:19

+0

出於好奇,爲什麼不在控制器內部做? – Scott 2011-02-08 16:21:20

+0

@Scott,web服務可能會觸發該方法發送電子郵件。 – 2011-02-08 17:02:04

回答

1

使用來自@Mitch Rosenburg的評論作爲答案:

我正在使用DotLiquid模板。

0

我自己並沒有嘗試過,但是我找到了一個名爲Postal的庫,我打算在自己的應用中使用這個庫。

0

你可以像在下面的方法:

private string ViewToString(string viewName, object model) 
{ 
    if (string.IsNullOrEmpty(viewName)) 
     viewName = ControllerContext.RouteData.GetRequiredString("action"); 

    ViewData.Model = model; 

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

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

而在你的操作方法,你可以使用它像這樣

ViewToString("Index", model); 

其中模式是您要發送到模型你的'模板'

0

我不得不一次做同樣的事情,最後我使用HttpWebRequest來呈現視圖並將結果捕獲爲一個字符串。

這個解決方案帶來了一系列其他問題(獲取授權cookie,通過我們的自定義URL安全層供電等),它感覺效率低下和草率,但截止日期是截止日期,對嗎?

代碼看起來是這樣的:

public string GetEmailBody(string url) 
{ 
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
    request.Method = "GET"; 

    HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
    Stream responseStream = response.GetResponseStream(); 
    StreamReader streamReader = new StreamReader(responseStream); 
    return streamReader.ReadToEnd(); 
} 

希望它可以幫助別人。

相關問題