Записи с тегом «ASP.NET»

Собственные страницы ошибок в ASP.NET MVC и IIS7

04.09.2010 12:07 / Артём Волк / 18 просмотров

В случае использования в приложении на ASP.NET MVC техники обработки HTTP-ошибок, подобной этой, IIS7 может заменять страницу ошибок на собственную, получив от приложения HTTP-ответ с кодом, отличным от 200.

Для решения это проблемы достаточно добавить параметр в Web.config:

<httpErrors existingResponse="PassThrough" />

Отображение тега label в Editor Template'е в ASP.NET MVC

04.07.2010 23:09 / Артём Волк / 183 просмотра

В ASP.NET MVC 2 появилась удобная возможность — определять шаблоны для отображения и редактирования свойств модели определённых типов (как стандартных, например String или DateTime так и пользовательских). Шаблоны применяются, например, с помощью HTML-хелперов Html.EditorFor() и Html.DisplayFor(). Однако, чтобы добраться до мета-информации о редактируемом свойстве модели внутри подобных шаблонов придется постараться.

читать дальше...

Ошибка Validation of viewstate MAC failed (Проверка состояние вида MAC не удалась) или 404 во время PostBack при использовании HTML-тега base

14.06.2010 16:19 / Артём Волк / 244 просмотра

Проблема возникает, если для страниц сайта на 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-ревизии в код приложения

17.05.2010 0:25 / Артём Волк / 249 просмотров

Если в качестве системы контроля версий используется SVN удобно включать в финальный исполняемый код номер ревизии. Для этой цели можно воспользоваться командой svnversion, входящей в клиент командной строки или SubWCRev.exe из комплекта TortoiseSVN (для Windows).

читать дальше...

Встроенный String.Format() в inline-тегах ASP.NET

09.05.2010 15:52 / Артём Волк / 261 просмотр

В одном скринкасте заметил интересный трюк.

Вместо такой записи:

<%= 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

02.05.2010 13:57 / Артём Волк / 354 просмотра

В ASP.NET встроено несколько способов кеширования:

  • Кеширование данных, например результатов «тяжёлых запросов»
  • Кеширование результата Action'a для ASP.NET MVC
  • Кеширование страниц целиком
  • Кеширование Web User Controls

Для последних двух способов кешированием можно управлять декларативно с помощью аттрибутов и разметки в .aspx\.ascx так и программно. В ASP.NET 4.0 появилась возможность использовать собственные провайдеры (для кеширования данных, например, на диске).

К сожалению, встроенные средства кеширования не позволяют программно очистить кеш Control'ов, например очистить кеш для блока последних новостей после добавления новой записи. Способ того, как обойти это ограничение и будет описан в этом посте.

Идея метода заключается в следующем: напрямую управлять сбросом кеша контролов нельзя, но можно указать объекты в кеше, при удалении которых будет очищен кеш контрола.

читать дальше...

Опыт миграции ASP.NET приложений на IIS 7 и MSSQL 2008

05.04.2010 0:54 / Артём Волк / 519 просмотров

Возникла необходимость перенести существующие проекты написанные на ASP.NET 2.0 и 3.5SP1 работающие на IIS6 и MSSQL 2005 на актуальные версии компонентов веб-платформы. В IIS6 использовался ASP.NET wildcard mapping поэтому для IIS7 был выбран Integrated Mode.

читать дальше...

Перенос кода Global.asax в папку App_Code

14.02.2010 23:37 / Артём Волк / 190 просмотров

При использовании модели ASP.NET приложения Web Site Project удобно хранить весь C#-код (кроме code-behind) в папке App_Code. Генерируемый же по умолчанию файл Global.asax помещается в корень сайта и содержит C# код.

читать далее...

Аудит входа и выхода пользователей в ASP.NET 2.0 приложении при использовании Forms Authentication

07.02.2010 20:15 / Артём Волк / 224 просмотра

Возникла необходимость к существующему приложению на ASP.NET 2.0, которое использует Forms Authentication добавить регистрацию входа (login) и выхода (logout) пользователей.

читать дальше...

Генерация не-HTML контента в ASP.NET MVC

18.01.2010 23:04 / Артём Волк / 328 просмотров

Иногда бывает нужно сгенерировать контент с 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, но, например, если нужно добавить нестандартные теги, возможно, решение с шаблоном будет удобнее.


Страница 1 из 4