2012-02-21 12 views
0

私はその主題から、あなたはたぶん「何が地獄か」と考えていることを知っています。しかし、私に説明させてください!レンダリングMVC MVCで参照されているDLLからの非MVCプロジェクトの部分ビュー

私は2つのプロジェクトがあります。 MyMVCWebsite - 別のWindows Azureのワーカーの役割で実行されている別のDLLプロジェクト - 窓紺碧 MyWebsiteWorker上で実行されているMVCのウェブサイトを。 MyMVCWebsiteは、コードの一部を使用するDLLとして参照します。

例えば/メール/ DailyNewsletter(モデル:userDetails)、私は電子メールと呼ばれるコントローラを持っているとアクションは、私たちが送った電子メールの異なるタイプのコントローラは私が/レンダリングできるようになる方法RenderPartialViewAsStringを公開

Email/DailyNewsletter/userDetailsを文字列に変換して、電子メールのHtmlBodyで送信することができます。

私はウェブサーバーからこれらの電子メールを送信したいと思うが、これはすべて素晴らしいと思いますが、私はそうではありません。 (あなたもEmailControllerの新しいインスタンスを作成することはできません)

明らかにこれは動作しません

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

は、私のようなものを使用してMyWebsiteWorkerから部分ビューをレンダリングできるようにしたいです私は送信する電子メールの数が1000になる可能性があるので、この方法でやりたいと思っています。その負荷がWebサーバーにかかることは望ましくありません。

答えて

0

最初にメールをウェブサイトに送信するのはなぜですか?ちょうどそれを外部アプリの一部にしてください。あなたの電子メールテンプレートにRazorビューを使用する場合は、FluentEmailのようなものをインストールしてください。これは、ビューレンダリングを行うための独自のバージョンのRazorエンジンをインストールします。なぜ私は非ウェブプロジェクトではうまくいかないのか分かりません。

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

0

Iあなたを助けるために私の少し少し遅れますが、これが答えているので、私はここにこれを残しています。

私はプロジェクトで同じ問題を抱えていました。私がやったやり方は、RazorEngineでした。このためには、文字列内の全体のビューを使用してから、RazorEngineとモデルを解析する必要がありますが、これにはいくつかの制限があります。

私は紺碧のストレージからブロブの中に自分のビューを持っており、作業者のロールがそれをダウンロードしてモデルと解析します。ページのフォーム紺碧のダウンロード

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()); 
} 

は、モデルが正しい情報を持っているので、ロジックを実行し、その後、私はElasticEmailを使用していた私の場合はRazorEngine

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

でページを解析します私の電子メールを送信するには、コードをウェブサイトから作業者のロールにコピーしてから送信してください。

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

希望すると助かります

関連する問題