我想探索属性作为品牌的手段。如何创建/使用自己的属性

时间:2013-04-03 18:16:37

标签: .net asp.net-mvc-4 custom-attributes

在MVC中,您可以使用可由Html帮助程序读取的值来装饰属性。例如,Html.LabelFor()读出属性的display属性。我想知道的是,是否有可能为完整的价值做到这一点?我正在探索通过使用属性来控制品牌信息的可能性。这就是我想象的:

[Branded]
public string Greeting { get; set; }

然后,当读取此属性时,该属性将运行并通过其他一些机制提取品牌信息。我认为我走这条道路的原因是我们需要能够品牌化以及提供本地化。所以最终可能会做这样的事情

[Localized]
[Branded]
public string Greeting { get; set; }

[Localized]从资源文件加载信息,而不是在视图中拉取信息。这样做的原因是我们不希望在整个会话期间传递ResourceManager,这对于经理实施后可能会更加清晰。

我确信这已经让人们感到畏缩,但无论如何我还想探索它。所以我想知道是否有人可以指出我正确的方向或提供任何相关的MVC4品牌推广经验。

更新:

好的,既然我已经按照下面的一些关于属性创建的回答,我更清楚我的问题是什么,所以让我澄清一下:

我创建了一个属性,我可以在视图模型中装饰属性,其属性名称可以存储为资源,也可以通过其他方式来容纳信息品牌。所以下一步就是将其纳入视图。那么如何将该注释拉入视图?我在考虑扩展,所以它想要这样:

视图模型

[Branded("greeting")] // this creates a string property called "Value" 
public string Greeting { get; set; }

查看

@Html.BrandedFor(m => m.Greeting) //this should actually read from BrandedAttribute.Value on this property

1 个答案:

答案 0 :(得分:2)

您对如何创建自定义属性有疑问吗?如果是这样,您只需要继承Attribute类。

using System;
[AttributeUsage(AttributeTargets.Class|AttributeTargets.Struct)]
public class Person : Attribute
{
   public Person(string name) { this.name = name; }
   public int age;
   string name;
}

如果你想要的是一个自定义的html帮助器,那么你可以创建这样的东西:

public static MvcHtmlString CustomLabel(this HtmlHelper html, string expression)
{
    return MvcHtmlString.Create("<label>" + expression +  + "</label>");
}

并像这样使用它:

 @Html.CustomLabel(m => m.Name);