在MVC3应用程序中组合UIhint和其他元数据?

时间:2012-02-14 10:57:19

标签: asp.net-mvc asp.net-mvc-3

我正在创建一个属性,我将用它来提供有关MVC 3 ViewModel中属性的度量单位的其他信息。这跟我asking关于实现这一目标的最佳方法。

我创建了一个UnitOfMeasure属性,该属性通过AdditionalValues元数据将其他信息传递给字符串模板。理想情况下,我想为UnitOfMeasure创建一个编辑模板,而不是将其添加到字符串编辑器模板中。

有没有告诉自定义元数据提供商更改所选模板?有效地,如果它在属性上看到UnitOfMeasure属性,那么我还想在幕后自动添加UiHint(“UnitOfMeasure”)。这样我就不必在字符串编辑器模板中为我的UnitOfMeasure助手添加代码了。

我应该注意,我不想使用UiHint控制参数(除非它是唯一选项)

由于

1 个答案:

答案 0 :(得分:5)

您可以从UIHint派生您的自定义属性:

public class UnitOfMeasureAttribute : UIHintAttribute, IMetadataAware
{
    public UnitOfMeasure(): base("foo")
    {

    }

    public void OnMetadataCreated(ModelMetadata metadata)
    {
        throw new NotImplementedException();
    }
}

然后:

public class MyViewModel
{
    [UnitOfMeasure]
    public string Foo { get; set; }
}

或:

public class MyViewModel
{
    public string Foo { get; set; }
}

并且在视图中都是这两种情况:

@Html.EditorFor(x => x.Foo)

在第一种情况下,显然将使用~/Views/Shared/EditorTemplates/foo.cshtml自定义模板,而在第二种情况下使用默认字符串模板。