1

DataAnnotationsModelMetadataProvider'sGetMetadataForProperties(..., Type containerType)GetMetadataForType(..., Type modelType).中的 containerType 和 modelType 有什么区别?我还想提供它们的值的示例,例如对于带有 CustomerViewModel 的一些虚构的“编辑”页面。

4

1 回答 1

0

GetMetadataForPropertiesModelMetadata为在 中找到的每个属性返回一个实例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 回答