获取Asp.Net web项目中用于电子邮件的aspx页面的内部Html
使用ASP.NET 我有一个弹出式扩展器上的电子邮件按钮,我想使用另一个aspx页面的内部html用于正文,然后在发送前编辑几个标记。这可能吗获取Asp.Net web项目中用于电子邮件的aspx页面的内部Html,asp.net,web-applications,Asp.net,Web Applications,使用ASP.NET 我有一个弹出式扩展器上的电子邮件按钮,我想使用另一个aspx页面的内部html用于正文,然后在发送前编辑几个标记。这可能吗 基本上,我正在使用.Net.Mail.MailMessage创建一个HtmlBody,并希望在不实际呈现页面的情况下获取另一个页面的html,而不是将其重新创建为字符串。如果将电子邮件内容放入服务器控件,则可以将其呈现为字符串 public static string GetRenderedHtml(this Control control) { S
基本上,我正在使用.Net.Mail.MailMessage创建一个HtmlBody,并希望在不实际呈现页面的情况下获取另一个页面的html,而不是将其重新创建为字符串。如果将电子邮件内容放入服务器控件,则可以将其呈现为字符串
public static string GetRenderedHtml(this Control control)
{
StringBuilder sbHtml = new StringBuilder();
using (StringWriter stringWriter = new StringWriter(sbHtml))
using (HtmlTextWriter textWriter = new HtmlTextWriter(stringWriter))
{
control.RenderControl(textWriter);
}
return sbHtml.ToString();
}
如果您有任何可编辑控件TextBox、DropDownList等,则需要将它们替换为标签。有关完整的示例和说明,请参阅下面的文章
您将需要创建一个要从中获取html的页面实例。之后,您可以使用下面的示例中的方法来保护它,让它生成通常会发送到浏览器到HtmlTextWriter的html 创建HtmlTextWriter时,可以使用StringBuilder和TextWriter的组合,以便从HtmlTextWriter获取html。像这样的
StringBuilder SB = new StringBuilder();
StringWriter SW = new StringWriter(SB);
HtmlTextWriter htmlTW = new HtmlTextWriter(SW);
MyPage page = new MyPage(); // your page here
page.RenderHtml( htmlTW ); //You need to create this method in your page, see below
string html = SB.ToString();
所以唯一的问题是Page.Render受到保护。您需要在Page类中公开一个调用Render方法的公共方法
这样的方法应该适用
public void RenderHtml( HtmlTextWriter htmlTextWriter )
{
Render( htmlTextWriter );
}
希望这有帮助。首先,创建html电子邮件不允许复杂的html内部、外部样式和其他控件请参见 因此,我所做的是使用以下内容创建一个用于发送电子邮件的html字符串 1创建一个简单的.htm文件作为模板,格式化标准html表格中的所有内容,而不是asp:tables和其他标准html标记 2仅在必要时使用直列样式 3然后创建可替换的文本单词或短语。您还可以使用注释替换文本或添加到表中,请参见下面的标记
<span style="font-size: 16px;">TodaysDate</span>
<table id="PeopleTable" border="1" cellpadding="3" cellspacing="0" width="720">
<tr style="font-weight: bold;">
<td width="100">
First Name
</td>
<td width="100">
Last Name
</td>
<td width="100">
Phone Number
</td>
</tr>
<!--AddRowsHere-->
</table>
5将此字符串返回到.Net.Mail.MailMessage.Body,并按正常方式发送。确保将mailmasage.IsBodyHtml设置为True
您也可以使用StringBuilder创建整个字符串,而无需使用模板。这只是有点模糊。你能展开吗?所以Page=new MyPage;?,然后我将RenderHtml方法放在MyPage.aspx中?我这样做了,但看不到。请尝试MyPage=新建MyPage。你应该看看你的方法。谢谢你的帮助。它将适用于没有内部和外部样式的非常简单的页面。谢谢。如何从另一个页面获取控件以便将其传递给函数?可以使用control control=new OtherPage.findcontrolid;。或者您可以使用Visible=false将控件添加到当前页面。谢谢,但是它只适用于没有内部和外部CSSY的简单html,您需要将css内联或将链接标记添加到控件中。
Using sr As New System.IO.StreamReader(Server.MapPath("PeoplePage.htm"))
GetHtml = sr.ReadToEnd
End Using
GetHtml = Replace(GetHtml, "TodaysDate", Now.ToShortDateString)