Андрей,
Ваша проблема с тем, что сообщение не отображается, это строка:
<span class="error_message">@Html.ValidationMessage(ViewData.ModelMetadata.PropertyName)</span>
Если вы посмотрите на визуализированный исходный код HTML, вы увидите что-то вроде следующего:
<span class="field-validation-error" data-valmsg-for="<className>.FirstName" data-valmsg-replace="true"></span>
Обратите внимание, что он включает класс в атрибут данных. Тем не менее, ubobtrusive не соответствует этому. То, что вам нужно, это просто:
<span class="field-validation-error" data-valmsg-for="FirstName" data-valmsg-replace="true"></span>
Для этого измените код в вашем редакторе на:
@Html.ValidationMessageFor(v => v)
Аналогично, чтобы сделать ваш код более легким для чтения, оба эти варианта также работают для вашего другого кода ...
@Html.LabelFor(v => v)
@Html.TextBoxFor(v => v, new { placeholder = ViewData.ModelMetadata.Watermark })