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

Значение по умолчанию для select'а в ASP.NET MVC

29.07.2011 17:34 / Артём Волк / 407 просмотров / ...

Иногда возникает необходимость добавить в выпадающий список (<select />) ещё один пункт с пустым атрибутом value и примерно таким текстом: «выберите, пожалуйста, значение». Обычно такой пункт размещается в выпадающем списке первым. Специально для этого случая существуют специальные версии методов Html.DropDownList() и Html.DropDownListFor(), которые позволяют указать текст этого <option>'а следующим образом:

<%: Html.DropDownListFor(m => m.MyModelField, Model.ListOfOptions, "— не выбрано") %>

Универсальный пейджер для ASP.NET MVC

11.07.2011 21:29 / Артём Волк / 636 просмотров / ...

Практически в каждом веб-проекте необходим т.н. пейджер — элемент интерфейса, с помощью обеспечивается навигация по страницам списка каких-либо элементов. Для подобной функциональности, которая повторяется из проекта в проект, удобно сделать более-менее универсальное решение. Наша реализация должна была удовлетворять таким требованиям:

  • Нумерация страниц с единицы
  • HTML-код пейджера в виде Partial View
  • Отсутствие привязки к какому либо конкретному способу передачи номера текущей страницы в URL и к правилам роутинга
  • Возможность использования пейджера с любым источником данных (LINQ2SQL-запрос, ADO.NET-запрос и т.п.), т.е. возможность реализации собственного алгоритма выборки страницы данных

Итогом решения будет набор из ViewModel-классов и View-файлов в двух вариантах: WebForms View Engine и Razor.

Интересно, реально ли оформить решения в виде пакета NuGet?

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

Указание неймспейсов для view-файлов ASP.NET MVC в формате Razor

11.06.2011 12:07 / Артём Волк / 717 просмотров / ...

В приложениях на Web Forms и на ASP.NET MVC с использованием view в формате .aspx можно было указать нужные неймспейсы, которые будут доступны в шаблонах с помощью такой конструкции в Web.config:

<pages>
	<namespaces>
		...
		<add namespace="Snippets.Helpers"/>
		<add namespace="Snippets.Models.ViewModel"/>
		...
		</namespaces>
</pages>

Для Razor'а используется другая процедура компиляции шаблонов, поэтому эти параметры на него не влияют.

решение...

Вставка кода счётчиков по условию в ASP.NET MVC

18.04.2011 12:26 / Артём Волк / 491 просмотр / ...

Для того, чтобы код счётчиков не мешал разработке на локальной машине удобно вставлять его во view с помощью такой проверки (при условии, что на «живой» версии приложения установлен параметр <compilation debug="false" /> как это и должно быть):

<% if (!HttpContext.Current.IsDebuggingEnabled) { %>

	<!-- Google Analytics code -->
	<script type="text/javascript">
		// ...
	</script>
	<!-- /Google Analytics code -->

<% } %>

Скорее всего, можно использовать и проверку по свойству HttpRequest.IsLocal.

Шаблоны e-mail'ов в ASP.NET MVC

01.04.2011 21:39 / Артём Волк / 605 просмотров / ...

По аналогии с решением для WebForms, в ASP.NET MVC можно использовать для генерации текста e-mail'ов обычные view. Работающее решение нашлось на одном, к сожалению, не отзывающемся сейчас сайте.

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

nl2br() для ASP.NET MVC

21.03.2011 9:22 / Артём Волк / 472 просмотра / ...

Упрощённый аналог PHP-функции nl2br(), оформленный в виде extension-метода к helper'у ASP.NET MVC:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Linq.Expressions;

namespace CrispStudio.Helpers
{		
	public static class HtmlNl2BrExtensions
	{
		public static string Nl2br(this HtmlHelper html, string input)
		{
			return input.Replace(Environment.NewLine, "<br />\r\n");
		}
	}
}

Пример использования:

<div>
	<%= Html.Nl2br(Html.Encode(Model.Text)) %>
</div>

О возможных усовершенствованиях (поддержке всех типов переводов строк, например) можно прочесть на StackOverflow.

Валидация запроса в ASP.NET 4.0

06.02.2011 0:05 / Артём Волк / 727 просмотров / ...

В 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

05.02.2011 23:51 / Артём Волк / 533 просмотра / ...

Для того, чтобы запустить ASP.NET 4.0 на IIS6 нужно предпринять несколько не совсем очевидных действий.

Генерация CSV из ASP.NET MVC приложения

21.01.2011 22:51 / Артём Волк / 860 просмотров / ...

Интересный метод генерации CSV из ASP.NET MVC с помощью класса-наследника System.Web.Mvc.FileResult. Плюсы решения:

  • Используется стандартный класс ASP.NET MVC для генерации файла для скачивания
  • CSV можно сгенерировать практически из любой коллекции объектов
  • Заголовки колонок генерируются из значений атрибутов [DisplayName]
  • Можно указать имена свойств, которые не нужно экспортировать

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

исправленный вариант кода...

Получение значения атрибута DisplayName в контроллере ASP.NET MVC

26.12.2010 21:41 / Артём Волк / 739 просмотров / ...

Дополнение от 29.03.2011: Код обновлён для поддержки метаданных, определённых с помощью partial-классов и атрибута [MetadataType]

В случае, если для снабжения модели ASP.NET MVC приложения метаданными используются DataAnnotations, например так:

public class MyViewModel
{	
	[DisplayName("Имя пользователя")]
	public string UserName { get; set; }

	...
}

Для программного получения значения атрибута [DisplayName], например, в коде контроллера, можно воспользоваться следующим методом (оригинал решения):

public static class MetaDataHelper
{
	public static string GetDisplayName(Type dataType, string fieldName)
	{		
		// First look into attributes on a type and it's parents
		DisplayNameAttribute attr;
		attr = (DisplayNameAttribute)dataType.GetProperty(fieldName).GetCustomAttributes(typeof(DisplayNameAttribute), true).SingleOrDefault();

		// Look for [MetadataType] attribute in type hierarchy
		// http://stackoverflow.com/questions/1910532/attribute-isdefined-doesnt-see-attributes-applied-with-metadatatype-class
		if (attr == null)
		{
			MetadataTypeAttribute metadataType = (MetadataTypeAttribute)dataType.GetCustomAttributes(typeof(MetadataTypeAttribute), true).FirstOrDefault();
			if (metadataType != null)
			{
				var property = metadataType.MetadataClassType.GetProperty(fieldName);
				if (property != null)
				{
					attr = (DisplayNameAttribute)property.GetCustomAttributes(typeof(DisplayNameAttribute), true).SingleOrDefault();
				}
			}
		}
		return (attr != null) ? attr.DisplayName : String.Empty;
	}
}

Пример использования:

string fieldDisplayName = MetaDataHelper.GetDisplayName(typeof(MyViewModel), "UserName");

Минус решения — имя поля приходится указывать в виде строки, возможно и строго типизированное решение.


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