我正在创建一个属性,我将用它来提供有关MVC 3 ViewModel中属性的度量单位的其他信息。这跟我asking关于实现这一目标的最佳方法。
我创建了一个UnitOfMeasure属性,该属性通过AdditionalValues元数据将其他信息传递给字符串模板。理想情况下,我想为UnitOfMeasure创建一个编辑模板,而不是将其添加到字符串编辑器模板中。
有没有告诉自定义元数据提供商更改所选模板?有效地,如果它在属性上看到UnitOfMeasure属性,那么我还想在幕后自动添加UiHint(“UnitOfMeasure”)。这样我就不必在字符串编辑器模板中为我的UnitOfMeasure助手添加代码了。
我应该注意,我不想使用UiHint控制参数(除非它是唯一选项)
由于
答案 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
自定义模板,而在第二种情况下使用默认字符串模板。