I have been using mvc2 for a while now, and when i need to set the template i use the DataType Attribute
[DataType(\"DropDown\")] public int
DataType is generally used to make it known that this is a very specific version of a property, such as price.
The most common example of DataType is the [DataType(DataTypes.EmailAddress)]
which usually is a string but we're saying that this is a very specific type of string.
They're both helpful and the UIHint overrides the DataType. So if you have a certain DataType but you want to override the editor for that specific property you can use a UIHint.
DataType attribute has two purposes
The purpose of UIHint is exactly same as the second point above. Where to use what? The answer is: context, ie., what will make more sense, what is closer to the physical problem your code is trying to solve. What if both are applied to the same property? The answer is: UIHint has precedence, obviously. But why would you apply both?