DataAnnotationsModelMetadataProvider
'sGetMetadataForProperties(..., Type containerType)
と。のcontainerTypeとmodelTypeの違いは何ですかGetMetadataForType(..., Type modelType)
。また、CustomerViewModelを使用した架空の「編集」ページなど、それらの値の例も示したいと思います。
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 に答える