Записи с тегом «WebForms»
Ошибка Validation of viewstate MAC failed (Проверка состояние вида MAC не удалась) или 404 во время PostBack при использовании HTML-тега base
Проблема возникает, если для страниц сайта на ASP.NET Web Forms определён тег <base />, например, следующим образом:
<base href="http://example.com" />
Страницы, находящиеся на том же уровне, что и URL в теге <base /> будут работать нормально (например, такая страница: http://example.com/SomePage.aspx), но стоит
попытаться использовать ещё одну страницу с тем же именем в подпапке, например, http://example.com/Folder/SomePage.aspx и при первом PostBack'e возникнет ошибка «Validation of viewstate MAC failed (Проверка состояние вида MAC не удалась)». В случае, если на сайте существует только одна страница с таким именем, т.е. или http://example.com/Folder/SomePage.aspx, или http://example.com/SomePage.aspx ошибка будет уже стандартной HTTP-ошибкой 404.
Причина ошибки в том, что тег <form> будет сформируется следующим образом:
<form name="aspnetForm" method="post" action="SomePage.aspx" id="aspnetForm">
Из-за тега <base /> результирующий URL для отправки формы будет неверным: http://example.com/SomePage.aspx, где часть http://example.com/ берется из тега <base />, а SomePage.aspx из атрибута action формы.
Способ исправления этой ошибки аналогичен решению проблемы с PostBack'ом при использовании URL Rewriting'а.
Перенос кода Global.asax в папку App_Code
При использовании модели ASP.NET приложения Web Site Project удобно хранить весь C#-код (кроме code-behind) в папке App_Code. Генерируемый же по умолчанию файл Global.asax помещается в корень сайта и содержит C# код.
Несколько форм на странице в WebForms и клавиша Enter
Одно из ограничений WebForms — вся страница заворачивается в один тег <form>. В том случае, если на странице
располагается несколько логических «форм», например, форма логина и небольшая форма поиска, которая есть на всех страницах,
нажатие клавиши Enter в поле поиска может не приводить к срабатыванию правильного обработчика на серверной стороне.
Шаблоны e-mail сообщений в ASP.NET
Задача подготовки е-мейл сообщений на основе шаблонов в ASP.NET оказывается нетривиальной. Среди вариантов решения: использование стороннего шаблонизатора, использование XSLT. Но, если ASP.NET — тоже шаблонизатор, пусть и весьма специфический, почему бы не поручить работу по подготовке е-мейлов ему?
SEF-адреса в ASP.NET 2.0 WebForms на IIS6: полное решение (работающий postback, ASP.NET AJAX)
Задача реализации «красивых» URL (вида /catalog/notebooks/asus/) в ASP.NET 2.0 приложении, работающем на IIS6 требует
нескольких дополнительных действий.
Элементы шаблонов в ASP.NET WebForms, нетривиальный data binding
WebForms задумывался для создания кода, обрабатывающего события пользовательского интерфейса, однако
в некоторых случаях бывает необходимо отойти от этой парадигмы и использовать кодовые вставки <%...%> в .aspx-файлах
почти в стиле ASP.NET MVC.
Встроенные компоненты, использущие т.н. data binding тоже иногда заставляют задуматься :)
Рекурсивный поиск контролов в ASP.NET WebForms без рекурсии
public static Control FindControlRecursively(Control root, string id)
{
Stack<Control> stack = new Stack<Control>();
stack.Push(root);
while (stack.Count > 0)
{
Control current = stack.Pop();
if (current.ID == id)
{
return current;
}
foreach (Control control in current.Controls)
{
stack.Push(control);
}
}
return null;
}
ASP.NET WebForms + JavaScript-фреймворки
Одной из особенностей WebForms является то, что атрибуты id элементов, являющихся серверными контролами генерируются на сервере, а в случае, если к серверным
контролам нужно применить клиентские скрипты, как, например, маски для полей ввода дат необходимо предпринять некоторые дополнительные действия, чтобы всё заработало.
Отключение валидации данных HTTP-запроса в ASP.NET WebForms и ASP.NET MVC
По умолчанию все данные HTTP-запроса подвергаются проверке на наличие потенциально небезопасных данных (клиентских скриптов, HTML-разметки и т.п.), в случае обнаружения подобных данных выбрасывается исключение, например такого вида:
A potentially dangerous Request.QueryString value was detected from the client....
или
A potentially dangerous Request.Form value was detected from the client....
