Я написал пользовательскую аннотацию DataAnnotation, которая прекрасно работает, если только я не использую ViewModel, а не саму модель.
В случае с моделью аннотация данных дает эффект:
<label class="tooltip" for="title">Enter a title.</label>
Когда я использую ViewModel, аннотация данных все еще отображает то же самое.Проблема здесь в том, что «for» должно быть что-то вроде «Product_title» вместо «title».
Вот HTMLHelper, который я написал, который отображает метку из аннотации данных:
(взято из asp.net Расширение MVC DataAnnotions )
public static MvcHtmlString TooltipFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression) {
var exp = (MemberExpression)expression.Body;
foreach (Attribute attribute in exp.Expression.Type.GetProperty(exp.Member.Name).GetCustomAttributes(false)) {
if (typeof(Tooltip) == attribute.GetType()) {
return MvcHtmlString.Create("<label class=\"tooltip\" for=\"" + exp.Member.Name + "\">" + ((Tooltip)attribute).Description + "</label>");
}
}
return MvcHtmlString.Create("");
}
Я покопался в объекте выражения, чтобы выяснить, какое свойство содержит имя свойства модели, которое в итоге будет входным идентификатором;"exp.Member.Name".
Теперь, когда я использую ViewModel, мне, очевидно, нужно что-то другое, потому что "exp.Member.Name" по-прежнему возвращает "title" вместо "Product_title", чтов итоге становится идентификатором поля ввода.
Итак, есть ли свойство, которое я могу получить, которое я могу использовать вместо «Member.Name», которое всегда будет возвращать правильный идентификатор, или мне придетсяобойти эту проблему с помощью JavaScript (что я могу сделать, если ничего не помогает)?