【问题标题】:Display name for nested complex type嵌套复杂类型的显示名称
【发布时间】:2012-04-04 09:52:00
【问题描述】:
我有两个模型类,如下所示,
我想为 Categoy.Name 属性使用不同的标签,如果它是嵌套的,但是如果我使用复杂类型,它没有绑定到 name 属性,对于复杂类型是否有类似 BindTo("Category.Name") 的选项? ??
public class ProductModel
{
public int Id { get; set; }
[DisplayName("Product Name")]
public string Name { get; set; }
[DisplayName("Category Name")]
[BindTo("Category.Name")]
public CategoryModel Category { get; set; }
}
public class CategoryModel
{
public int Id { get; set; }
[DisplayName("Name")]
public string Name { get; set; }
}
【问题讨论】:
标签:
c#
.net
asp.net-mvc
asp.net-mvc-3
【解决方案1】:
一种解决方案是使用MetadataType 属性。
public class ProductModel
{
public int Id { get; set; }
[DisplayName("Product Name")]
public string Name { get; set; }
public CategoryPropertyModel Category { get; set; }
}
[MetadataType(typeof(ICategoryModelCategoryDisplay))
public class CategoryModel : CategoryBaseModel { }
[MetadataType(typeof(ICategoryModelDisplay))
public class CategoryPropertyModel : CategoryBaseModel { }
public class CategoryBaseModel
{
public int Id { get; set; }
public string Name { get; set; }
}
public interface ICategoryModelSimpleDisplay
{
[DisplayName("Name")]
public string Name { get; set; }
}
public interface ICategoryModelCategoryDisplay
{
[DisplayName("Category Name")]
public string Name { get; set; }
}
当您使用CategoryModel 时,显示名称将为Name。
当您使用CategoryPropertyModel 时,显示名称将为Category Name。