【问题标题】:Custom Attribute in c# to give Custom data-attribute in htmlc# 中的自定义属性以在 html 中提供自定义数据属性
【发布时间】:2015-04-29 13:36:46
【问题描述】:

我希望能够在 C# 中为我的模型中的对象创建一个数据属性。显示时。我希望 html 在 html 本身的数据属性中呈现值。

在我的脑海中,代码看起来与此类似。

public class AffectsAttribute:Attribute
{
    public string[] Departments { get; set; }

}


[EmailAddress]
[Required(ErrorMessage = "Email is required")]
[Affects(Departments = new string[]{"Coaches"})]
public string Email {get; set;}

然后在 html 中,在被 razor 调用后,它看起来像这样

@Html.EditorFor(model => model.Email)


<input class="text-box single-line" data-affects="Coaches" data-val="true" data-val-email="The Email field is not a valid e-mail address." data-val-required="Email is required" id="Email" name="Email" type="email"  value="">

我不知道如何指定我希望在页面上呈现项目时添加附加数据属性。有人可以帮忙吗?

【问题讨论】:

  • uuu 这看起来很丑,你为什么要那样做?
  • @Legends 我会这样做,以便在业务层工作的开发人员可以指出区域之间的依赖关系,然后我们可以在用户更新时警告用户。
  • 为什么不使用AdditionalMetadata
  • 因为业务层,因此模型不在 MVC 项目中。我们已将两者完全分开。

标签: c# html asp.net-mvc model-view-controller data-annotations


【解决方案1】:

可以通过ValidationAttribute 完成。如果你继承这个:

public class MyCustomAttribute : ValidationAttribute
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
    }

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
    {
    }
}

GetClientValidationRules 是您感兴趣的内容。您返回一个 IEnumerable,其中包含您希望客户端拥有的属性。

你可以在CodeProject查看这篇文章。

【讨论】:

  • 我唯一的问题是任何模型数据都需要我使用 MVC 命名空间。由于我的模型位于业务层(类库)中,因此我目前没有该信息
【解决方案2】:

您必须创建一个新的 HTML 助手来执行此操作。 http://www.asp.net/mvc/overview/older-versions-1/views/creating-custom-html-helpers-cs

它是 HtmlHelper 的扩展,它创建了它。 比如:

  public static class YourExtensions
 {
      public static string YourMethodName(this HtmlHelper helper, string[] paramName)
      {
           return  String.Format("<input data-affects='{0}'>",String.Join(" ", paramName));
      }
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-17
    相关资源
    最近更新 更多