用对象asp.net c#呈现用户控件
本文关键字:用户 控件 对象 asp net | 更新日期: 2023-09-27 18:04:26
我正在做一个项目,我需要发送一封电子邮件。邮件格式已在ascx
Usercontrol中创建,该控件将用于呈现电子邮件正文,其中某些变量(如名称和日期)由另一个方法填充。
我的主要问题是我想在电子邮件正文中呈现控件以及类和方法的对象。实际上我想在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;
}
我不确定我完全掌握了你想要的东西,但你可以尝试使用所有控件暴露的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();
}