0

重複の可能性:
ビューを文字列としてレンダリングします

ビューを変数にロードして、メールで送信できるようにします。

私はそれがこのように機能することを望みます:

var mail = new SmtpClient();
var mailView = View("registration.cshtml", userModel);
mail.Send(FromAddress, userModel.Email, mailView.ViewBag.Title, mailView.ToString());

ToString()以外はすべて機能します。MVCにビューをコンパイルさせるにはどうすればよいですか?

4

3 に答える 3

1

これがあなたのコントローラーの中に入れるためのちょっとした方法です。

    protected string RenderViewToString(string viewName, object model)
    {
        ViewData.Model = model;
        using (var sw = new StringWriter())
        {
            var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
            var viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
            viewResult.View.Render(viewContext, sw);
            viewResult.ViewEngine.ReleaseView(ControllerContext, viewResult.View);
            return sw.GetStringBuilder().ToString();
        }
    }

そして、次のように使用できます。

string viewString = RenderViewToString("viewName", yourModel);
于 2012-09-26T21:37:27.803 に答える
0

ビュー (つまり、ブラウザーに表示する Web ページ) を実際にユーザーに送信することはほとんどありません。おそらく必要なのは、Razor テンプレートを電子メールにレンダリングする方法です。そのために、使用できるツールがいくつかあります。たとえば、テンプレートを非常にうまくレンダリングする FluentEmail を使用しています。

ソフトウェア エンジニアリングの観点からは、とにかくコントローラーにメールをレンダリングさせるのは良い習慣ではありません。これは、ビジネス プロセスにカプセル化する必要があります。コントローラーにメールをレンダリングさせることは、単一責任の原則に違反します。

于 2012-09-26T21:40:08.657 に答える
0

コントローラーからデータを送信することは悪い考えであることに同意します。たとえば、MSMQ を使用します。このリンクも見てください:

于 2012-09-26T21:55:31.647 に答える