Отправка электронного письма с предыдущей страницей в качестве контента в среде 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.
Я написал пост в блоге об этом здесь:
В основном это означает подключение к среде выполнения 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();
}
Очевидно, что это не получение предыдущей страницы, а создание ее заново и получение ее содержимого.
Я бы не стал прыгать через обручи, чтобы получить предыдущую страницу. Поскольку вы находитесь на какой-то странице / рабочем процессе, я предлагаю вам сохранить состояние, к которому вы стремитесь (если вы этого не делаете сейчас), а затем отправить электронное письмо, содержащее состояние, отображенное соответствующим образом.
Например: скажем, на предыдущей странице был какой-то комментарий и дата комментария. Затем вы можете сохранить это состояние (комментарий и дату), скажем, в базе данных, а затем выбрать его на следующей странице, где вы отправляете электронную почту.
Если база данных перегружена, вы можете сохранить ее в состоянии сеанса, а затем удалить, когда она будет использована.