Записи с тегом «ASP.NET»
Сборка и публикация ASP.NET MVC проекта из командной строки
В случае простых сценариев автоматической подготовки ASP.NET MVC проекта к публикации может быть достаточно обычного .bat-файла. Для компиляции, сохранения результата в отдельную папку и применения преобразований Web.config с сохранением вывода в лог достаточно следующих команд:
rem rem Настройки rem set PROJECT_PATH=.\MyProject.sln set CONFIGURATION=Release set EXPORT_DIR=C:\_MyProject-Deploy set LOG_FILE=c:\MyProject-Deploy.log rem rem Сборка и публикация rem C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe ^ %PROJECT_PATH% ^ /p:Configuration=%CONFIGURATION% ^ /p:DeployOnBuild=True ^ /p:DeployTarget=PipelinePreDeployCopyAllFilesToOneFolder ^ /p:_PackageTempDir=%EXPORT_DIR% ^ /p:AutoParameterizationWebConfigConnectionStrings=False ^ /l:FileLogger,Microsoft.Build.Engine;logfile=%LOG_FILE%
Для удобства изменяемые параметры вынесены в переменные, а длинные команды разбиты на строки с помощью символа ^.
Диалог Publish в Visual Studio выполняет эти же действия, но его нельзя вызвать из командной строки.
Значение по умолчанию для select'а в ASP.NET MVC
Иногда возникает необходимость добавить в выпадающий список (<select />) ещё один пункт с пустым атрибутом value и примерно таким текстом: «выберите, пожалуйста, значение». Обычно такой пункт размещается в выпадающем списке первым. Специально для этого случая существуют специальные версии методов Html.DropDownList() и Html.DropDownListFor(), которые позволяют указать текст этого <option>'а следующим образом:
<%: Html.DropDownListFor(m => m.MyModelField, Model.ListOfOptions, "— не выбрано") %>
Универсальный пейджер для ASP.NET MVC
Практически в каждом веб-проекте необходим т.н. пейджер — элемент интерфейса, с помощью обеспечивается навигация по страницам списка каких-либо элементов. Для подобной функциональности, которая повторяется из проекта в проект, удобно сделать более-менее универсальное решение. Наша реализация должна была удовлетворять таким требованиям:
- Нумерация страниц с единицы
- HTML-код пейджера в виде Partial View
- Отсутствие привязки к какому либо конкретному способу передачи номера текущей страницы в URL и к правилам роутинга
- Возможность использования пейджера с любым источником данных (LINQ2SQL-запрос, ADO.NET-запрос и т.п.), т.е. возможность реализации собственного алгоритма выборки страницы данных
Итогом решения будет набор из ViewModel-классов и View-файлов в двух вариантах: WebForms View Engine и Razor.
Интересно, реально ли оформить решения в виде пакета NuGet?
Указание неймспейсов для view-файлов ASP.NET MVC в формате Razor
В приложениях на Web Forms и на ASP.NET MVC с использованием view в формате .aspx можно было указать нужные неймспейсы, которые будут доступны в шаблонах с помощью такой конструкции в Web.config:
<pages> <namespaces> ... <add namespace="Snippets.Helpers"/> <add namespace="Snippets.Models.ViewModel"/> ... </namespaces> </pages>
Для Razor'а используется другая процедура компиляции шаблонов, поэтому эти параметры на него не влияют.
Specified-поля в SOAP веб-сервисах
В уже упоминавшемся ASP.NET-приложении, которое использует сторонний SOAP-веб сервис, для генерации proxy-классов использует механизм, доступный из Visual Studio как «Add Web Reference». После обновления до Visual Studio 2010 SP1 для элементов, объявленных в WSDL с аттрибутом minOccurs="0" с типом, отличным от type="xsd:string", например, так:
<xsd:element minOccurs="0" name="MyField" type="xsd:boolean" />
В proxy-классах генерировалось дополнительное свойство bool MyFieldSpecified. Если не поставить его в true перед вызовом веб-сервиса, поле не будет включено в SOAP-запрос. В моём случае изменить веб-сервис не было возможности (он сторонний), а все поля в вызове сервиса на самом деле обязательные. Найденные существующие решения либо требовали дополнительной обработки кода proxy-классов, либо ручного заполнения свойств или не подходили в моей ситуации.
Вставка кода счётчиков по условию в ASP.NET MVC
Для того, чтобы код счётчиков не мешал разработке на локальной машине удобно вставлять его во view с помощью такой проверки (при условии, что на «живой» версии приложения установлен параметр <compilation debug="false" /> как это и должно быть):
<% if (!HttpContext.Current.IsDebuggingEnabled) { %>
<!-- Google Analytics code -->
<script type="text/javascript">
// ...
</script>
<!-- /Google Analytics code -->
<% } %>
Скорее всего, можно использовать и проверку по свойству HttpRequest.IsLocal.
Extension-методы для DataRow и DataTable
Долгое время использовал такую конструкцию если нужно было получить данные из нетипизированного DataRow:
var temp = Convert.ToInt32(row["SomeField"]);
В случае, когда нужно было обработать nullable-поля, то использовался вот такой метод:
/*
* Taken from: http://stackoverflow.com/questions/209160/nullable-type-as-a-generic-parameter-possible
*/
public static Nullable<T> GetValueOrNull<T>(DataRow row, string key) where T : struct
{
object columnValue = row[key];
if (!(columnValue is DBNull))
return (T)columnValue;
return null;
}
...
int? temp = GetValueOrNull<int>(row, "SomeField");
Оказалось, что есть более простой способ с использованием extension-метода Field<>():
int temp = row.Field<int>("SomeField");
Для класса DataTable есть свой набор полезных расширений
Ошибка "The full-text query parameter for Fulltext Query String is not valid" после обновления на .NET 4.0
После обновления до ASP.NET 4.0 реализация полнотекстового поиска с LINQ2SQL, описанная в сниппете более чем годичной давности перестала работать со следующей ошибкой: The full-text query parameter for Fulltext Query String is not valid.
Валидация запроса в ASP.NET 4.0
В ASP.NET 4.0 одно из изменений со статусом «breaking change» приводит к тому, что ошибки валидации появляются для проектов на ASP.NET MVC на action'ах с атрибутом [AllowHtml] и даже для проектов на Web Forms с такой директивой в Web.config:
<pages validateRequest="false">
Решение проблемы следующее: необходимо добавить в Web.config в секцию <system.web />:
<httpRuntime requestValidationMode="2.0"/>
После указания этого параметра для проектов на Web Forms как и раньше можно управлять валидацией с помощью директивы <pages validateRequest="false"> в Web.config или избирательно отключать валидацию на уровне aspx-страницы.
Для ASP.NET MVC управление валидацией запроса можно осуществлять с помощью атрибутов [ValidateInput] и [AllowHtml]
В уже упомянутом посте говорится, что для ASP.NET MVC 3 этот параметр устанавливать необязательно.
ASP.NET 4.0 на IIS6
Для того, чтобы запустить ASP.NET 4.0 на IIS6 нужно предпринять несколько не совсем очевидных действий.
