编辑器模板/显示模板如何识别分配给它们的任何属性?

Jon*_*onn 7 asp.net-mvc-3

我想在[Required]我的DateTime编辑器模板中添加一个属性,以便我可以添加相应的验证方案或DataType.Date属性,以便我知道何时只应显示日期.但我无法弄清楚如何获取元数据,说明编辑器模板为其分配了哪些属性.

Dar*_*rov 15

内置属性,例如[Required]在元数据上分配不同的属性(请参阅我在答案结尾处链接的博客文章以了解更多信息).例如:

public class MyViewModel
{
    [Required]
    public string Foo { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

将分配:

@{
    var isRequired = ViewData.ModelMetadata.IsRequired;
}
Run Code Online (Sandbox Code Playgroud)

在相应的编辑器/显示模板中.

如果您有自定义属性:

public class MyCustomStuffAttribute : Attribute, IMetadataAware
{
    public void OnMetadataCreated(ModelMetadata metadata)
    {
        metadata.AdditionalValues["customStuff"] = "some very custom stuff";
    }
}
Run Code Online (Sandbox Code Playgroud)

以及用它装饰的视图模型:

public class MyViewModel
{
    [MyCustomStuff]
    public string Foo { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

在相应的编辑器/显示模板中,您可以获取:

@{
    var myCustomStuff = ViewData.ModelMetadata.AdditionalValues["customStuff"];
}
Run Code Online (Sandbox Code Playgroud)

另外,您应该阅读Brad Wilson 关于ASP.NET MVC中的ModelMetadata和模板以及如何使用它的一系列博客文章.