Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在电子邮件中发送转发器_C#_Asp.net_Repeater_Mailmessage_Htmltextwriter - Fatal编程技术网

C# 在电子邮件中发送转发器

C# 在电子邮件中发送转发器,c#,asp.net,repeater,mailmessage,htmltextwriter,C#,Asp.net,Repeater,Mailmessage,Htmltextwriter,我需要在邮件中发送一个使用转发器获得的表,有没有关于如何在邮件正文中嵌入转发器的示例?我正在用MailMessage发送邮件。我尝试实现这个示例: System.IO.StringWriter stringWrite = new System.IO.StringWriter(); System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite); MyRepeater.Render

我需要在邮件中发送一个使用转发器获得的表,有没有关于如何在邮件正文中嵌入转发器的示例?我正在用MailMessage发送邮件。我尝试实现这个示例:

    System.IO.StringWriter stringWrite = new System.IO.StringWriter();

    System.Web.UI.HtmlTextWriter htmlWrite =
    new HtmlTextWriter(stringWrite);

    MyRepeater.RenderControl(htmlWrite);

    string emailContent = stringWrite.ToString();
但有一个错误:

Control ''m_repeater_btn" of type 'LinkButton' must be placed inside a form tag with    runat=server.
即使我把标签形式,我仍然得到一个错误,我应该如何把它

这是我的asp.net页面:

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true"   CodeBehind="ViewMySisters.aspx.cs"  %>
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

    <asp:Repeater ID="MyRepeater" runat="server">

    <HeaderTemplate>
        <table style="border-collapse:collapse; border:1px solid grey;" width="500">
            <tr>
                <td style="border: 1px solid grey;">firstname</td>
                <td style="border: 1px solid grey;">lastname</td>
                <td style="border: 1px solid grey;">age</td>
    <td style="border: 1px solid grey;">work experienes</td>

            </tr>
    </HeaderTemplate>

    <ItemTemplate>
        <tr>
            <td style="border: 1px solid grey;"><%# DataBinder.Eval(Container.DataItem, "NAME")%></td>
            <td style="border: 1px solid grey;"><%# DataBinder.Eval(Container.DataItem, "FAMILY         NAME")%></td>
            <td style="border: 1px solid grey;"><%# DataBinder.Eval(Container.DataItem, "AGE")%></td>
            <td style="border: 1px solid grey;"><asp:LinkButton ID="btn" runat="server"   Text=">>>>" OnCommand="btnDetails_Command" CommandArgument='<%# Eval("ID") %>' /></td>
        </tr>
    </ItemTemplate>

    <FooterTemplate>
        </table>
    </FooterTemplate>

</asp:Repeater>

      <br />
<asp:Button ID="sendMail" runat="server" Text="send" OnClick="sendmail_Clicked" />
</asp:Content>

名字
姓氏
年龄
工作经历

1)尝试执行页面(而不是单个转发器):

其中
这是您的页面类

2) 您也可以将中继器置于控制面板上。下面是执行控件主体的代码:

 public static string LoadMailTemplate(string templatePath)      
 {
                var page = new Page();
                Control myControl = page.LoadControl(templatePath);   
                var sb = new StringBuilder();    
                page.Controls.Add(myControl);

                using (var sw = new StringWriter(sb))
                {
                    page.Server.Execute(page, sw, false);
                }

                return sb.ToString();
 }
电话:

string  emailBody = LoadMailTemplate("~/modules/eurolight/MailTemplates/OrderMailTemplate.ascx");

电子邮件不是asp.net页面。对于您来说,仅限于平面HTML控件。我将链接按钮更改为锚定标记,并将其链接回web应用程序,然后根据查询字符串加载详细信息。

您需要以下代码:

Public Overrides Sub VerifyRenderingInServerForm(control As Control)

End Sub

你知道一些我可以看的例子吗?你在看什么或什么例子?Litmus.com将在电子邮件中为您提供您所能做的。这是一条控制路径。例如templatePath=“~/modules/eurolight/MailTemplates/OrderMailTemplate.ascx”。但首先尝试执行yor页面(不使用控件),首先尝试以下代码:var sb=new StringBuilder();使用(var sw=new StringWriter(sb)){string emailBody=page.Server.Execute(page,sw,false);}使用“this”而不是“page”,它说:无法隐式地将类型void转换为类型StringWriter。我如何找到控件的路径?在您的情况下,您不需要控件路径。您可以尝试在viewmyisters.aspx.cs文件中执行页面:this.Server.execute(this,sw,false);最好解释一下这段代码应该放在哪里,以及用户为什么要使用它
Public Overrides Sub VerifyRenderingInServerForm(control As Control)

End Sub