I have noticed the following bug.
If you use an input wrapper such as NumericTextBoxFor(), DropdownlistFor() ... , the unobstrusive validation attributes are not rendered when passing in a nested property.
For example, this will work as expected and output the validation attributes ( such as data-required...)
NumericTextBoxFor(model => model.FirstName)
However, the following will not render the validation attributes:
NumericTextBoxFor(model => model.Person.FirstName)