DataAnnotationsModelMetadataProvider
的{{1}}和GetMetadataForProperties(..., Type containerType)
中的containerType和modelType有何区别?
我也想举例说明他们的价值观,例如:对于一些虚构的“编辑”页面,使用CustomerViewModel。
答案 0 :(得分:0)
GetMetadataForProperties
会为ModelMetadata
中找到的每个属性返回containerType
个实例。
所以如果你有:
public class CustomerViewModel
{
[DisplayName("Customer Name")]
public string Name { get; set; }
public string AccountNumber { get; set; }
// etc.
}
这个示例代码:
var model = new CustomerViewModel();
var propertiesMetadata = provider.GetMetadataForProperties(model, model.GetType());
var customerName = propertiesMetadata.Where(m => m.PropertyName == "Name").First().DisplayName; // customerName would equal "Customer Name"
GetMetadataForType
获取表面上容器本身的元数据。
示例:
var model = new CustomerViewModel();
var metadata = provider.GetMetadataForType(() => model, model.GetType());
var customerName = metadata.Properties.Where(m => m.PropertyName == "Name").First().DisplayName; // customerName would equal "Customer Name"
这些东西主要在内部的模型绑定,验证和视图引擎中使用。
在视图中,您不直接访问这些方法。您的视图已经ModelMetadata
可访问。以下视图(使用CustomerViewModel
作为模型类型)打印出带有模型的每个属性的显示名称的范围。
@foreach (var propertyMetadata in ViewData.ModelMetadata.Properties) {
<span>@propertyMetadata.DisplayName</span>
}
// the resulting HTML should be <span>Customer Name<span><span>Account Number</span>