DataAnnotationsModelMetadataProvider
'sGetMetadataForProperties(..., Type containerType)
和GetMetadataForType(..., Type modelType)
.中的 containerType 和 modelType 有什么区别?我还想提供它们的值的示例,例如对于带有 CustomerViewModel 的一些虚构的“编辑”页面。
问问题
867 次
1 回答
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>
于 2012-06-07T09:23:52.907 回答