Отправка электронного письма с предыдущей страницей в качестве контента в среде asp.net C#

Хорошо, я могу отправить содержимое текущей страницы по электронной почте просто отлично, форматирование это немного странно и в итоге получается немного иначе, чем ожидалось, но я уже привык к этому.

В настоящее время я хочу отправить и получить доступ ко всем форматированным формам предыдущих страниц внутри текущей (я думаю, что это можно сделать с помощью объекта сеанса), а затем отправить это по электронной почте. Это включает в себя пользовательский ввод в текстовые поля и т. Д. (Который в настоящее время я сохраняю на страницах через объекты сеанса [если это имеет значение]).

Я пытался найти в Google и на этом сайте ничего, что действительно решает эти проблемы, и их несколько.

Если бы кто-то мог указать мне правильное направление, это было бы очень ценно.

Для ясности, вот процесс, который я использую для отправки текущей страницы по электронной почте:

    StringWriter sw = new StringWriter( );
    HtmlTextWriter w = new HtmlTextWriter( sw );
    MAIN.RenderControl( w );
    string s = sw.GetStringBuilder( ).ToString( );

    MailMessage message = new MailMessage( );
    message.IsBodyHtml = true;
    message.To.Add( new MailAddress( Session["eMail"].ToString( ) ) );
    message.Subject = "foo bar";
    message.From = new MailAddress( "email@email.com" );
    message.Body = s; //this would be filled with the previous page

Так что в основном message.Body будет содержимым формы (отформатированным и со всем пользовательским содержимым) предыдущей страницы.

Заранее спасибо!

РЕДАКТИРОВАТЬ: я не имею в виду буквальную предыдущую страницу перед той, на которой вы в настоящее время находитесь, я имею в виду страницу, которая была ранее в процессе, чтобы попасть на эту страницу (в моем случае это вторая страница в процессе, и электронное письмо будет быть отправлено на четвертой странице).

2 ответа

Решение

Если вы знаете все параметры, которые были заданы на предыдущей странице, вы можете создать экземпляр своей страницы и сгенерировать его HTML.

Я написал пост в блоге об этом здесь:

http://www.diaryofaninja.com/blog/2009/09/14/a-simple-solution-to-viewing-a-preview-of-any-page-in-your-site

В основном это означает подключение к среде выполнения ASP.Net и выполнение страницы в течение ее жизненного цикла - если ваша страница имеет какие-либо общедоступные свойства, такие как идентификаторы содержимого и т. Д., Вы можете установить их как часть этого.

Page tempPage = new Views.Blog.BlogDetail();
tempPage.PageIntro = intro;
tempPage.PageContent = content;

StringWriter sw = new StringWriter();
HttpContext.Current.Server.Execute(tempPage, sw, false);
if (!String.IsNullOrEmpty(sw.ToString()))
{
    return sw.ToString();
}

Очевидно, что это не получение предыдущей страницы, а создание ее заново и получение ее содержимого.

Я бы не стал прыгать через обручи, чтобы получить предыдущую страницу. Поскольку вы находитесь на какой-то странице / рабочем процессе, я предлагаю вам сохранить состояние, к которому вы стремитесь (если вы этого не делаете сейчас), а затем отправить электронное письмо, содержащее состояние, отображенное соответствующим образом.

Например: скажем, на предыдущей странице был какой-то комментарий и дата комментария. Затем вы можете сохранить это состояние (комментарий и дату), скажем, в базе данных, а затем выбрать его на следующей странице, где вы отправляете электронную почту.

Если база данных перегружена, вы можете сохранить ее в состоянии сеанса, а затем удалить, когда она будет использована.

Другие вопросы по тегам