2012-02-21 48 views
0

我從該主題知道您可能在想「究竟是什麼」。但讓我解釋一下!從MVC引用的DLL渲染非MVC項目中的MVC部分視圖

我有兩個項目: MyMVCWebsite - 一個運行在Windows Azure上的MVC網站 MyWebsiteWorker - 一個獨立的Windows Azure工作者角色上運行的DLL項目。這引用MyMVCWebsite作爲DLL,因爲它使用了它的一些代碼。

我有一個名爲電子郵件控制器和行動是不同類型的電子郵件我們發送,例如/電子郵件/ DailyNewsletter(型號:爲userDetails)

控制器暴露了一個方法RenderPartialViewAsString這將讓我來渲染/電子郵件/ DailyNewsletter/userDetails到一個字符串,然後我可以發送電子郵件的HtmlBody。

如果我想從網絡服務器發送這些電子郵件,這是一切都很好,但我不知道。

我希望能夠使用類似呈現來自MyWebsiteWorker局部視圖:

For each user in usersToEmail 
    Dim _con as new EmailController 
    SendEmail(user.emailAddress, _con.RenderPartialViewAsString(user)) 
next 

顯然,這並不正常工作(你甚至不能創造EmailController的新實例)

我想這樣做,因爲可能會有1000封電子郵件發送,並且我不希望將這些負載放在Web服務器上。

回答

0

爲什麼建立電子郵件發送到網站上呢?只需將其作爲外部應用的一部分即可。如果您想爲您的電子郵件模板使用Razor視圖,請安裝諸如FluentEmail之類的工具來執行此操作。它安裝了它自己的Razor引擎版本來進行視圖渲染。我不明白爲什麼它不適用於非web項目。

http://lukencode.com/2010/04/11/fluent-email-in-net/

0

我我有點晚了一點,以幫助你,而是讓這回應,我在這裏留下這個。

我在一個項目中遇到了同樣的問題,我這樣做的方式是使用RazorEngine。爲此,您可以在字符串中使用整個視圖,然後使用RazorEngine和模型對其進行解析,當然這存在一些限制。

我從azure存儲中獲得了我的視圖,並且worker角色將其下載並隨後使用模型對其進行解析。

下載頁面形式蔚藍:

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(appSets["LocalEnvironmentStorageConnection"]); 
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); 
CloudBlobContainer container = blobClient.GetContainerReference(appSets["LocalEnvironmentContainer"]); 
CloudBlockBlob blockBlob = container.GetBlockBlobReference("LocalEnvironmentBlob"); 
string page; 
using (var memoryStream = new MemoryStream()) 
{ 
    blockBlob.DownloadToStream(memoryStream); 
    page = System.Text.Encoding.UTF8.GetString(memoryStream.ToArray()); 
} 

執行邏輯,這樣的模式有正確的信息,然後與RazorEngine

string html = Razor.Parse(page, model); 

在我來說,我是用ElasticEmail解析頁面發送我的電子郵件,只需將代碼從網站複製到工作人員角色然後發送它

_client.Send("", user.email, subject, html, offset); 

希望對大家有所幫助