11/27/2007 1:30:00 AM

Некоторое время назад я спрашивал у всех подряд, нет ли на примете простого ASP.NET-контрола, который позволяет редактировать переданный ему объект. Вроде DetailsView, но с валидацией.

Ни у кого не оказалось. Зато не один человек сказал что-то вроде "найдешь - сообщи". Сообщаю - не нашел. Пришлось писать самому, благо делом оказалось простым, заняло всего пару-тройку часов.

Что получилось:

  • Обработка объекта, естественно, делается с помощью рефлексии свойств этого объекта.
  • Атрибуты ReadOnly и Browsable учитываются.
  • Атрибуты DisplayName и Description учитываются.
  • Для следующих типов генерируются следующие отображения:
    Enum -> DropDownList; [Flags]Enum -> CheckBoxList; Boolean -> CheckBox; все остальное -> TextBox.
  • Для полей Enum'ов поддерживаются атрибуты Browsable и EnumDisplayName (юзер-френдли имя поля).
  • Для полей, которые будут редактироваться с помощью текстового (и только для них) поля поддерживается валидация.
  • Для валидации свойств используются атрибуты ValidateRequired, ValidateRange и ValidateCompare.
  • Тексты валидаторов задаются в свойствах объекта.
  • Для всех элементов формы редактирования (таблица, лейблы, валидаторы, поля значений) поддерживаются стили, которые можно задать в свойствах или использовать в скинах.

Иными словами, редактируемый класс может выглядеть так:

public enum MyEnum
{
    [EnumDisplayName("Choice one")]
    One = 1,

    [EnumDisplayName("Choice two")]
    Two= 2,

    [EnumDisplayName("NO CHOICE")]
    NoneOfThem =
4
}

public class TestEntry
{
    [DisplayName("User's name")]
    [Description("The name of the user")]
    [ValidateRequired]
    public string Name { get; set; }

    [DisplayName("User's age")]
    [Description("Age must be more than 20 and less than 45")]
    [ValidateRequired, ValidateRange(20, 45)]
    public int Age { get; set; }

    [DisplayName("User's choice")]
    public MyEnum Choice { get; set; }

    [DisplayName("Man?")]
    public bool IsMan { get; set; }
}

Для моих целей этой функциональности хватает с лихвой. Если кому-то будет полезно или интересно - можно что-нибудь подкрутить или добавить, там все очень просто :)

Код прилагаю.

[UPDATE]: Там, в коде, используются фичи из только что релизнувшегося .NET Framework 3.5. Как минимум там есть метод, расширяющий EnumConverter, по поводу остального не уверен, не проверял на 2.0. Так что не говорите мне, что оно не компилируется :) Переделать под 2.0, я думаю, 7 минут работы максимум.

AspNetObjectEditor.zip (5.74 kb)

Tags:

11/24/2007 7:47:06 PM

Оказывается, Visual Studio 2005 Office Tools не может работать без еды. Причем еда годится не любая, первоначальный вариант ее, видимо, либо быстро кончился, либо пришелся не по вкусу и пришлось готовить "второй выпуск":

eda

А вы говорите "искусственный интеллект" :)

11/20/2007 1:13:00 AM

Итак, релиз свершился ранее, чем 2008й год.

11/13/2007 10:38:42 PM

Какое-то время назад ScottGu заявил о том, что его команда делает ASP.NET MVC Framework, который будет включен в ASP.NET и будет поддерживаться "студией".

Сегодня он описал (точнее, это еще только первая часть), как это будет работать. На первый взгляд получилось весьма неплохо.

Глядите: http://weblogs.asp.net/scottgu/archive/2007/11/13/asp-net-mvc-framework-part-1.aspx

11/11/2007 8:01:00 PM

Недавно окончившийся отпуск я провел двумя третями в Австралии и одной третью в России. Впечатления описывать, пожалуй, не буду по той причине, что понравилось настолько, что не хотелось уезжать. Это я про Австралию сейчас.

Возможно Ленка напишет что-нибудь, а я только дам пару ссылок на фотографии "оттуда":

http://picasaweb.google.ru/alexey.raga/SydneyCity

http://picasaweb.google.ru/alexey.raga/Sydney

http://picasaweb.google.ru/alexey.raga/Canberra

Будет еще одна часть, вскоре.

А пока могу только добавить, что уже очень хочется туда переехать жить и работать :) Эх, сколько нового нам несет 2008-й год...

Tags: ,

Powered by BlogEngine.NET 2.5.0.6

About the author

Alexey Raga Alexey Raga
.NET software developer.

E-mail me Send mail

Twitter


Recent posts

Archive

Disclaimer

The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.

© Copyright 2012

Sign in