Есть ли хороший способ отображения обязательных индикаторов полей при использовании DataAnnotations в MVC 2? - PullRequest
1 голос
/ 24 апреля 2010

У меня есть проверка, работающая с аннотациями данных на всех моих моделях, но я хотел бы отобразить индикатор для обязательных полей при загрузке страницы. Поскольку все мои проверки были централизованы, я бы предпочел не использовать жесткие индикаторы в представлении. Вызов проверки при загрузке покажет сводку проверки. Кто-нибудь нашел хороший способ позволить модели определять, что требуется, но проверять ее при рендеринге вида, аналогично Html.ValidationMessageFor?

Ответы [ 2 ]

2 голосов
/ 26 апреля 2010

Это не в моей голове, но это должно помочь вам начать:

public static MvcHtmlString IsRequiredTextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression)
{
   if (expression.IsRequired())
      return MvcHtmlString.Create(string.Format("{0} [REQUIRED]", helper.TextBoxFor(expression)));

   return helper.TextBoxFor(expression);
}

public static bool IsRequired<T, V>(this Expression<Func<T, V>> expression)
{
   var memberExpression = expression.Body as MemberExpression;
   if (memberExpression == null)
      throw new InvalidOperationException("Expression must be a member expression");

   return memberExpression.Member.GetAttribute<RequiredAttribute>() != null;
}

public static T GetAttribute<T>(this ICustomAttributeProvider provider) where T : Attribute
{
   var attributes = provider.GetCustomAttributes(typeof(T), true);
   return attributes.Length > 0 ? attributes[0] as T : null;
}
0 голосов
/ 24 апреля 2010

Вы можете добавить метод рендеринга, который использует отражение для проверки атрибута Required в поле.

...