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:

Comments are closed

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