在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
答案 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);