如何使用MvcExtensions在ASP.NET MVC(4)中配置复杂类型

时间:2012-09-07 11:02:45

标签: asp.net asp.net-mvc asp.net-mvc-4 mvcextensions

我有一个带有一些复杂属性的模型:

public class TestModel
{
    public string Prop1 { get; set; }
    public SubClass Prop2 { get; set; }
}
public class SubClass 
{
    public string Test { get; set; }
}

public class TestModelMetadata : ModelMetadataConfiguration<TestModel>
{
    public TestModelMetadata ()
    {
        Configure(m => m.Prop1).DisplayName("is going to be displayed");
        Configure(m => m.Prop2.Test).DisplayName("is NOT going to be displayed");
    }
}

当我尝试在视图上显示模型时:

@Html.LabelFor(m => m.Prop1)
@Html.LabelFor(m => m.Prop2.Test)

显示Prop1的正确标签,对于Prop2.Test不显示。

有人知道解决方案吗?感谢!!!!!

1 个答案:

答案 0 :(得分:0)

我应该为每种类型创建元数据配置,对于SubClass:

public class SubClassMetadata : ModelMetadataConfiguration<SubClass>
{
    public SubClassMetadata()
    {
        Configure(m => m.Test).DisplayName("is going to be displayed1");
    }
}

如果要使用@ Html.DisplayForModel显示具有子类属性的模型,也应该覆盖对象的显示模板,因为默认mvc(3 - 我不知道它是否在v4中更改)显示模板的对象跳过“ComplexType “财产。自定义默认模板的起点可以是https://github.com/ASP-NET-MVC/ASP.NET-Mvc-3/blob/master/mvc3/src/MvcFuturesFiles/DefaultTemplates/DisplayTemplates/Object.ascx

希望它有所帮助。