获取Asp.Net web项目中用于电子邮件的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

使用ASP.NET

我有一个弹出式扩展器上的电子邮件按钮,我想使用另一个aspx页面的内部html用于正文,然后在发送前编辑几个标记。这可能吗


基本上,我正在使用.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)