Иногда в веб-приложении бывает необходимо отослать код, сгенерированный веб-контролом на email пользователю. Чаще всего это встречается в системах со всяческими отчетами. Рассмотрим как это можно реализовать.
Каждый веб-контрол имеет в себе метод , RenderControl(HtmlTextWriter) который при вызове рендерит контрол и возвращает, как результат HtmlTextWriter. Программно это выглядит так:
StringBuilder SB = new StringBuilder(); StringWriter SW = new StringWriter(SB); HtmlTextWriter htmlTW = new HtmlTextWriter(SW); WebControlToRenderID.RenderControl(htmlTW);
Однако данный подход прекрасно работающий в ASP.NET 1.1 не подходит для ASP.NET 2.0, так как при выполнении вы получите исключение: RegisterForEventValidation can only be called during Render();
Это происходит потому, что в ASP.NET 2.0 появилась новая возможность - Event Validation. Сделана она для того, чтобы помочь избежать так называемых Injection атак.
К примеру у вас на веб-форме имеется DropDownList контрол:
<asp:DropDownList runat="server" id="MyDropDownList"> <asp:ListItem Value="1">Item 1</asp:ListItem> <asp:ListItem Value="2">Item 2</asp:ListItem> <asp:ListItem Value="3">Item 3</asp:ListItem> </asp:DropDownList>
В цикле жизни страницы контрол регистрирует себя на подобную проверку через класс ClientScriptManager методом RegisterForEventValidation. Этот метод может быть вызван только на этапе Render, иначе он генерирует исключение. А так как скорее код для програмной генерации контрола вызывается до этого этапа, к примеру, в событии Button1_Click, то вы гарантировано получаете исключение.
Естественно, сказанное выше применимо только к контролам требующим Event Validation. Вот их список:
- HtmlAnchor
- HtmlButton
- HtmlInputButton
- HtmlInputCheckBox
- HtmlInputHidden
- HtmlInputImage
- HtmlInputText
- HtmlInputPassword
- HtmlInputRadioButton
- HtmlInputReset
- HtmlInputSubmit
- HtmlSelect
- HtmlTextArea
- BulletedList
- Button
- Calendar
- CheckBox
- Table
- ChildTable
- WizardChildTable
- DataControlButton
- ImageButton
- DataControlImageButton
- LinkButton
- DataControlLinkButton
- DataControlPagerLinkButton
- DataGridLinkButton
- DetailsView
- DropDownList
- FormView
- GridView
- HiddenField
- ImageMap
- LayoutTable
- ListBox
- Menu
- PagerTable
- RadioButton
- RadioButtonList
- TextBox
- TreeView
- WizardDefaultInnerTable
- CatalogZone
- ConnectionsZone
- EditorZone
- WebPartZone
- ZoneButton
- ZoneLinkButton
Или же вы можете начинать рендеринг контрола(ов) в событии Page_Render. Перевод статьи Emailing the Rendered Output of an ASP.NET Web Control in ASP.NET 2.0<% @Page EnableEventValidation="False" ... %>
17 комментариев:
Гораздо более интересный пример - это рендеринг контрола не в обработчике на странице, а в отдельной библиотеке.
Не вижу особой разницы если честно. Поясните пожалуйста.
когда вызывается LoadControl() - это метод объекта Page.
А что будет если необходимо рендерить без объекта Page? Например из какой-то внутренней библиотеки.
Попробуй и посмотри, что выйдет
Вот код, который будучи скомпилированный в отдельную dll - прекрасно пашет:
static public class Class1
{
static public string Rnd()
{
SqlConnection conn = new SqlConnection("Data Source=SYNTBOOK\\SQLEXPRESS;Initial Catalog=koroleva;Integrated Security=True");
SqlCommand command = new SqlCommand("SELECT * FROM pages", conn);
DataTable dt = new DataTable();
SqlDataAdapter adpter = new SqlDataAdapter(command);
adpter.Fill(dt);
DataGrid grid = new DataGrid();
grid.DataSource = dt;
grid.DataBind();
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
HtmlTextWriter wr = new HtmlTextWriter(sw);
grid.RenderControl(wr);
return sb.ToString();
}
}
[url=http://wmtraffs.ru/]WMTraffs.ru[/url] - зарабатывай бабло, продавая POP-UP трафик на нашей партнёрке
Сайт WMTraffs.ru предлагает всем возможность зарабатывать на на ссылках, не имея сайта. Такженаша партнерская программа предлагает выкуп трафика с сайтов сети интернет popunder, clickunder, растяжка в шапке, обычные баннера.
Да уж. Как говорится в устоявшемся выражении:
Это мы языком Пушкина и Достоевского описываем титьки Памелы Андерсон и попу Дженифер Лопес.
Да уж. Как говорится в устоявшемся выражении:
Именно мы придумали набирать на сотовом номер и сбрасывать, чтобы не тратить деньги.
с празником!
разработка бизнеса разработка сайтов http://web-miheeff.ru разработка бизнеса
порядок разработки разработка сайтов http://web-miheeff.ru порядок разработки
Да уж. По поводу коментариев - навеяла на меня где-то услышанная фраза:
Ведь именно мы повернули вспять реки и счетчики электроэнергии.
Вы определенно правы
Добрый день!
Программа SoftHell PM-Bot (старое название HACSoft PM-Bot), необходима для массовой рассылки персональных сообщений на форумах.
Возможности:
1. Работает со многими типами форумов:SMF, ExBB, IPB1, IPB2, IPB3, IPB2 MR, miniBB, phpBB2, PunBB, vBulletin2, vBulletin 3(по 5 сообщений за раз), vBulletin3 MR(по 5 сообщений за раз)
2. Форумы описываются в специальных драйверах, т.е. при желании программу возможно настроить и на другие форумы.
3. Отсылка от нескольких пользователей одновременно (обход антифлуда).
4. Работа через прокси-сервер.
5. Система вариаций
6. Гененирование случайного числа, автоподстановка имени получателя и отправителя в каждое письмо и многое другое...
Программа обновилась до версии 2.1, не поддавайтесь на уловки мошенников со взломанной, устаревшей и не работающей версией программы.
Цена 4500 руб. Возможно проведение сделки через гаранта.
Контакты: icq 574444591
Официальный сайт: http://softhell.ru
Спасибо всем за внимание
После вселенской катастрофы Америка превратилась в выжженную пустыню. По дорогам которым нет конца, кишащим бандами, с враждой поражденной войной за воду и еду, ищет престаниище безстрашный Илай. Однажды он попадает в мрачные края, где когда-то была цветущая Калифорния, а теперь это сущий ад, где бесчинствует тиран Карнеги.
смотреть бесплатно онлайн книга илая
Здравствуйте!
Заметил такой вот web-сайт: Каталог номеров
Скажите, будет ли актуальна данная тема?
Добрый день!
Нашел такой вот web-проект:
Настройки и программы
Прошу заценить, будет ли востребована эта тема?
Очень нравятся все ваши кофейные игрушки :)
С косточкой песик стал просто неподражаем!
И лосю аксессуары в тему! На месте Санта Клауса в этот год я бы с оленями не заморачивалась;) - очень уж ваш лось к нему в упряжку просится;)))))))
А вот мой сайт возможно вас за интересует это - очередной островок любви и нежности - buy viagra ;);)...Большое спасибо вам и я очень благадарна вам за визит на мой сайт ...удачи...С Уважением
Отправить комментарий