2011-08-03 12 views
0

私は電子メールを送信する必要がある1つのプロジェクトに取り組んでいます。メール形式はascx Usercontrolで行われ、そのコントロールは電子メール本文のレンダリングに使用されます。名前や日付などの特定の変数は別の方法で埋められます。UserControlオブジェクトasp.netでレンダリングC#

私の主な問題は、クラスとメソッドのオブジェクトと共に電子メール本文にコントロールをレンダリングすることです。実際にはMVCのようにしたい(フロントエンドでモデルを渡す)。これを行う良い方法はありますか?次のように

私が使用していたコードは次のとおりです。

string path = "Email Template/LeaveRequestedEmailToAPPREC.ascx"; 
body = RenderUserControl(path,lrd); 
MailMessage msg = new MailMessage(); 
try 
{ 
    msg.From = new MailAddress(fromemail, fromname); 
    msg.To.Add(toemail); 
    msg.Subject = subject; 
    msg.Body = body; 
    msg.IsBodyHtml = true; 
    SmtpClient sc = new SmtpClient(); 
    sc.Host = "smtp.ntc.net.np"; 
    sc.Port = 25; 
    sc.Send(msg); 
    msg.Dispose(); 
    msg = null; 
    return true; 
} 



//======== Rendering the UserControl ========== 
public string RenderUserControl(string path,object viewmodel) 
{    
    Page holder = new Page(); 
    UserControl viewControl = (UserControl)holder.LoadControl(path); 

    HtmlForm tempForm = new HtmlForm(); //if the UserControl contain some server controls like TextBox, Button, Add a form wrapped them. 
    tempForm.Controls.Add(viewControl); 
    holder.Controls.Add(tempForm); 

    StringWriter output = new StringWriter(); 
    HttpContext.Current.Server.Execute(holder, output, false); 
    string outputToReturn = output.ToString(); 
    output.Close(); 
    return outputToReturn; 
} 

答えて

0

私は私はあなたが完全にしたい正確に何をつかむんだけど、あなたはすべてのコントロールによって公開さRenderControl方法を使用してみてください、などわからないんだけど例えば:

using (var buffer = new MemoryStream()) 
{ 
    var builder = new System.IO.StreamWriter(buffer); 
    using (var stream = new HtmlTextWriter(builder)) 
    { 
     holder.RenderControl(stream); 
    } 
    return builder.ToString(); 
} 
関連する問題