2011-12-03 36 views
0

我想用MVC 2的老好的方法來發送電子郵件發送電子郵件,但在這裏給出了一個錯誤:通過轉換代碼到MVC 3 通過渲染ASP .NET MVC的第3頁

  Control control1 = vp1.LoadControl("/Views/Home/_SupportEmailAdmin.cshtml"); 
      vp1.Controls.Add(control); 

的錯誤消息:

類型'ASP._Page_Views_Home__SupportEmail_cshtml'不會從'System.Web.UI.UserControl'繼承。

有沒有正確的方法來做到這一點?

這裏是代碼:

ViewBag.SupportRequest = this.SupportRequest; 

        ViewPage vp1 = new ViewPage(); 
        vp1.ViewData = ViewData; 

        Control control1 = vp1.LoadControl("/Views/Home/_SupportEmailAdmin.cshtml"); 
        vp1.Controls.Add(control); 

        StringBuilder sb1 = new StringBuilder(); 
        using (StringWriter sw1 = new StringWriter(sb1)) 
        { 
         using (HtmlTextWriter tw1 = new HtmlTextWriter(sw1)) 
         { 
          vp1.RenderControl(tw1); 
         } 
        } 

        sb1.Insert(0, @"<!DOCTYPE html PUBLIC ""-//W3C//DTD XHTML 1.0 Strict//EN"" ""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd""><html xmlns=""http://www.w3.org/1999/xhtml""><body>"); 
        sb1.Append("</body></html>"); 

        MailMessage msg1 = new MailMessage(new MailAddress(this.SupportRequest.EMail, this.SupportRequest.Name), 
         new MailAddress(from, fromName)); 
        msg1.Subject = fromSubject; 
        msg1.IsBodyHtml = true; 
        msg1.Body = sb1.ToString(); 
        .... 

兩個詞的問題是如何使用MVC 3頁模板來呈現爲文本,並將其發送。

更新:

的頂尖解決方案...

#region Send Support Request to Admin 

       StreamReader streamReader1 = new StreamReader(Server.MapPath("/Views/Home/_SupportEmailAdmin.cshtml")); 
       string emailTemplate1 = streamReader1.ReadToEnd(); 
       streamReader1.Close(); 

       string result1 = Razor.Parse(emailTemplate1, new { Name = sr.Name, EMail = sr.EMail, Subject = sr.Subject, Message = sr.Message }); 

       StringBuilder sb1 = new StringBuilder(); 
       sb1.Insert(0, @"<!DOCTYPE html PUBLIC ""-//W3C//DTD XHTML 1.0 Strict//EN"" ""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd""><html xmlns=""http://www.w3.org/1999/xhtml""><body>"); 
       sb1.Append(result); 
       sb1.Append("</body></html>"); 

       MailMessage msg1 = new MailMessage(new MailAddress(sr.EMail, sr.Name), 
        new MailAddress(from, fromName)); 
       msg1.Subject = fromSubject; 
       msg1.IsBodyHtml = true; 
       msg1.Body = sb1.ToString(); 

       #endregion 

       smtp.Send(msg1); 

和CSHTML的內容

file 

<table> 
    <tbody> 
     <tr> 
      <td> 
       Name 
      </td> 
      <td>@Model.Name 
      </td> 
     </tr> 
     <tr> 
      <td> 
       Email 
      </td> 
      <td>@Model.EMail 
      </td> 
     </tr> 
     <tr> 
      <td> 
       Subject 
      </td> 
      <td>@Model.Subject 
      </td> 
     </tr> 
     <tr> 
      <td> 
       Message 
      </td> 
      <td>@Model.Message 
      </td> 
     </tr> 
    </tbody> 
</table> 

回答