0

在 MVC 中,您可以使用 Html 助手可以读取的值来装饰属性。例如 Html.LabelFor() 读取属性的显示属性。我想知道,是否有可能做到这一点以获得完整的价值?我正在探索通过使用属性来控制品牌信息的可能性。这是我的设想:

[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
4

1 回答 1

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);
于 2013-04-03T18:31:39.947 回答