Записи с тегом «ASP.NET»
Собственные страницы ошибок в ASP.NET MVC и IIS7
В случае использования в приложении на ASP.NET MVC техники обработки HTTP-ошибок, подобной этой, IIS7 может заменять страницу ошибок на собственную, получив от приложения HTTP-ответ с кодом, отличным от 200.
Для решения это проблемы достаточно добавить параметр в Web.config:
<httpErrors existingResponse="PassThrough" />
Отображение тега label в Editor Template'е в ASP.NET MVC
В ASP.NET MVC 2 появилась удобная возможность — определять шаблоны для отображения и редактирования свойств модели определённых типов (как стандартных, например String или DateTime так и пользовательских).
Шаблоны применяются, например, с помощью HTML-хелперов Html.EditorFor() и Html.DisplayFor(). Однако, чтобы добраться до мета-информации о редактируемом свойстве модели внутри подобных шаблонов придется постараться.
Ошибка 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'а.
Включение номера SVN-ревизии в код приложения
Если в качестве системы контроля версий используется SVN удобно включать в финальный исполняемый код номер ревизии. Для этой цели можно воспользоваться командой svnversion, входящей в клиент командной строки или SubWCRev.exe из комплекта TortoiseSVN (для Windows).
Встроенный String.Format() в inline-тегах ASP.NET
В одном скринкасте заметил интересный трюк.
Вместо такой записи:
<%= DateTime.Now.ToString("g") %>
можно написать:
<%= "{0:d}", DateTime.Now %>
А вместо:
<%= String.Format("Текущая дата: {0:d}, можно использовать числа, например: {1:0.#####}", DateTime.Now, Math.PI) %>
можно написать:
<%= "Текущая дата: {0:d}, можно использовать числа, например: {1:0.#####}", DateTime.Now, Math.PI %>
Трюк работает как для ASP.NET MVC так и для ASP.NET WebForms начиная с версии 2.0. Первоисточник в официальной документации пока не найден.
Программное очищение кеша Web User Controls для ASP.NET
В ASP.NET встроено несколько способов кеширования:
- Кеширование данных, например результатов «тяжёлых запросов»
- Кеширование результата Action'a для ASP.NET MVC
- Кеширование страниц целиком
- Кеширование Web User Controls
Для последних двух способов кешированием можно управлять декларативно с помощью аттрибутов и разметки в .aspx\.ascx так и программно. В ASP.NET 4.0 появилась возможность использовать собственные провайдеры (для кеширования данных, например, на диске).
К сожалению, встроенные средства кеширования не позволяют программно очистить кеш Control'ов, например очистить кеш для блока последних новостей после добавления новой записи. Способ того, как обойти это ограничение и будет описан в этом посте.
Идея метода заключается в следующем: напрямую управлять сбросом кеша контролов нельзя, но можно указать объекты в кеше, при удалении которых будет очищен кеш контрола.
Опыт миграции ASP.NET приложений на IIS 7 и MSSQL 2008
Возникла необходимость перенести существующие проекты написанные на ASP.NET 2.0 и 3.5SP1 работающие на IIS6 и MSSQL 2005 на актуальные версии компонентов веб-платформы. В IIS6 использовался ASP.NET wildcard mapping поэтому для IIS7 был выбран Integrated Mode.
Перенос кода Global.asax в папку App_Code
При использовании модели ASP.NET приложения Web Site Project удобно хранить весь C#-код (кроме code-behind) в папке App_Code. Генерируемый же по умолчанию файл Global.asax помещается в корень сайта и содержит C# код.
Аудит входа и выхода пользователей в ASP.NET 2.0 приложении при использовании Forms Authentication
Возникла необходимость к существующему приложению на ASP.NET 2.0, которое использует Forms Authentication добавить регистрацию входа (login) и выхода (logout) пользователей.
Генерация не-HTML контента в ASP.NET MVC
Иногда бывает нужно сгенерировать контент с Content-Type отличным от text/html, например, RSS-ленту или JavaScript-информер. В случае использования WebForms или ASP.NET MVC с WebForms View Engine проблема решается следующим образом:
<%@ Page ContentType="application/x-javascript" Language="C#" Inherits="..." %>
или, например:
<%@ Page ContentType="application/rss+xml" Language="C#" Inherits="..." %>
P.S. Для RSS конечно правильнее будет использовать встроенные средства .NET Framework'a, но, например, если нужно добавить нестандартные теги, возможно, решение с шаблоном будет удобнее.
