DataType vs UiHint

Я использую mvc2 какое-то время, и когда мне нужно установить шаблон, я использую атрибут DataType

    [DataType("DropDown")]
    public int Field { get; set; }

Я вижу, что другие используют UiHint для достижения тех же результатов

    [UiHint("DropDown")]
    public int Field { get; set; }

В чем разница между использованием этих двух атрибутов? Какой атрибут я должен использовать, или они предназначены для разных задач?

Ответы

Ответ 1

DataType обычно используется, чтобы сообщить, что это очень конкретная версия свойства, например цена.

Наиболее распространенным примером DataType является [DataType(DataTypes.EmailAddress)], который обычно является строкой, но мы говорим, что это очень специфический тип строки.

Они оба полезны, и UIHint переопределяет DataType. Поэтому, если у вас есть определенный тип данных, но вы хотите переопределить редактор для этого конкретного свойства, вы можете использовать UIHint.

Ответ 2

Атрибут DataType имеет две цели

Предоставление дополнительной информации о типе для поля данных. Вы делаете это, применяя атрибут DataTypeAttribute к полю данных в модели данных и указывая дополнительное имя типа из перечисления DataType. Затем механизм просмотра использует шаблон по умолчанию для отображения свойства, например, флажок для булева. Если вы хотите переопределить шаблон по умолчанию и хотите использовать настраиваемый шаблон, его можно использовать для связывания настраиваемого шаблона поля с этим полем данных. В этом случае вы должны предоставить частичную страницу [.cshtml, MVC 4] для описания отображения.

Цель UIHint точно такая же, как и вторая точка выше. Где использовать что? Ответ: контекст, то есть, что будет иметь больше смысла, что ближе к физической проблеме, которую ваш код пытается решить. Что делать, если оба применяются к одному и тому же свойству? Ответ: UIHint имеет приоритет, очевидно. Но почему вы применили оба?