Отправка повторителя по электронной почте

Мне нужно отправить полученную с помощью репитера таблицу на почту, есть примеры как встроить репитер в тело письма? Я использую 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>

person Camilla    schedule 21.01.2013    source источник


Ответы (3)


1) Попробуйте выполнить свою страницу (не один повторитель):

    private string LoadMailTemplate()
    {
        var sb = new StringBuilder();

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

        return sb.ToString();
    }

где this — класс вашей страницы.

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");
person algreat    schedule 21.01.2013
comment
это путь контроля. Например, templatePath = ~/modules/eurolight/MailTemplates/OrderMailTemplate.ascx. Но сначала попробуйте выполнить свою страницу (без использования элементов управления) - person algreat; 21.01.2013
comment
попробуйте сначала этот код: var sb = new StringBuilder(); используя (var sw = new StringWriter (sb)) { string emailBody = page.Server.Execute (page, sw, false); } Используйте «это» вместо «страница» - person algreat; 21.01.2013
comment
он говорит: не может неявно преобразовать тип void в строку типа - person Camilla; 21.01.2013
comment
как я могу найти путь к элементу управления? - person Camilla; 21.01.2013
comment
В вашем случае вам не нужен путь управления. Вы можете попытаться выполнить свою страницу внутри файла ViewMySisters.aspx.cs: this.Server.Execute(this, sw, false); - person algreat; 21.01.2013
comment
давайте продолжим это обсуждение в чате - person algreat; 21.01.2013

Электронная почта не является страницей asp.net. Там вы ограничены плоскими элементами управления HTML. Я меняю кнопку изменения ссылки на тег привязки, связываю ее обратно с вашим веб-приложением и загружаю детали на основе строки запроса.

person Brian P    schedule 21.01.2013
comment
Вы знаете несколько примеров, на которые я мог бы взглянуть? - person Camilla; 21.01.2013
comment
Что вы ищете или примеры? Litmus.com даст вам то, что вы можете сделать по электронной почте. - person Brian P; 21.01.2013

Вам нужен этот код:

Public Overrides Sub VerifyRenderingInServerForm(control As Control)

End Sub
person user1538071    schedule 09.07.2013
comment
Было бы неплохо объяснить, куда должен идти этот код и почему пользователь должен его использовать. - person CodingIntrigue; 09.07.2013