【问题标题】:i would like to explore attributes as means for branding. How do I create/use my own attributes我想探索属性作为品牌的手段。如何创建/使用自己的属性
【发布时间】:2013-04-03 18:16:37
【问题描述】:

在 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

【问题讨论】:

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


    【解决方案1】:

    您的问题是关于如何创建自定义属性?如果是这样,您需要做的就是从 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);
    

    【讨论】:

    • 好的,很公平,但是如何从视图中的属性中提取属性?
    • 您似乎对上面的更新感到困惑。您要创建和属性还是自定义 html 助手?
    • 我想创建一个可以从 html 帮助程序中读取的属性。
    • 关于您的更新。助手仍然没有显示如何从修饰属性的属性中获取值。换句话说,Greeting 属性标记有 Branded 属性。品牌属性有一个名为 Value 的属性。视图绑定到具有 Greeting 属性的 ViewModel。我需要在视图中从该模型中获取 VALUE - 正如我在示例中所示。
    • 看看这篇文章:dotnetcurry.com/ShowArticle.aspx?ID=715。看起来所描述的正是您想要完成的目标
    猜你喜欢
    • 2013-06-19
    • 2017-10-30
    • 2017-04-20
    • 2015-10-16
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    • 2014-02-10
    • 1970-01-01
    相关资源
    最近更新 更多