2

我有以下问题。

我有 Html 元素,我想将 Data- 属性和特定类附加到 Like so :

<element id="" class="custom_class" data-attribute="value" data-attr-two="value2"></element>

但我想在模型级别定义这些属性,如下所示:

public class ModelName 
{
  [DataAnnotation({attribute = "value", attr_2 = "value2"})]
  [Class= "custom_class"]
  public type PropertyName { get; set;}
}

我知道自定义验证属性,但它们的问题是元素看起来像这样:

<element id="" class="custom_class" data-val-attribute="value"/></element>

而不是这个:

<element id="" class="custom_class" data-attribute="value"/></element>

如果有另一种方法可以做到这一点,也许向 Html 助手添加另一个字典像这样:

@Html.TextBoxFor(model => Model, new { DataAnnotation : DataAnnotationObjectModel.Create({Message =        "something", Name = "something" }) )

DataAnnotationObject 将是一个类,其中包含所有类型的数据属性 id 正在使用,并且一些方法创建默认对象,这些对象预先枚举了重复数据。

我知道我可以做到这一点:

@Html.TextBoxFor(model => Model, new { data_attr = @item.Value }  )

但是我必须为每个模型中的每个属性添加 5 个或更多属性,并且我必须为每个属性添加至少 3 次。

有没有办法做到这一点?

如果您在理解这个问题时遇到问题,请随时对您的问题发表评论,我会尽力解释

4

1 回答 1

1

作为一个快速的解决方案,您可以尝试像这样定义一个 HTML Helper;

public static MvcHtmlString AttributedTextBoxFor<TModel, TProperty>(this HtmlHelper _helper, Expression<Func<TModel, TProperty>> expression)

在代码中,您应该能够检索从表达式中引用的属性(按照这个 StackOverflow问题),并且通过使用反射,您应该再次能够获取该属性的属性(PropertyInfo.Attributes)。一旦你有了这些,你应该能够生成一个定义了所有“data-”属性的匿名对象,并从上面定义的帮助器中返回标准的 TextBoxFor 并传入这个对象:

return _helper.TextBoxFor(expression, myHtmlAttributes);

没有太多时间来编写完整的解决方案,但它应该只是几行样板代码。

于 2012-05-27T19:12:05.207 回答