首页 文章

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

提问于
浏览
7

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

1 回答

  • 15

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

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

    将分配:

    @{
        var isRequired = ViewData.ModelMetadata.IsRequired;
    }
    

    在相应的 editor/display 模板中。

    如果您有自定义属性:

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

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

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

    在相应的 editor/display 模板中,你可以获取:

    @{
        var myCustomStuff = ViewData.ModelMetadata.AdditionalValues["customStuff"];
    }
    

    另外你应该完全阅读 Brad Wilson 的系列博客文章关于 ASP.NET MVC 中的 ModelMetadata 和模板是什么以及如何使用它。

相关问题