我正在编写自定义ModelMetadataProvider
,它扩展了默认的DataAnnotationsModelMetadataProvider
。不幸的是我遇到了一个问题: ModelMetadata.Container
属性始终为空。ModelMetadata.Container属性为空
但覆盖GetMetadataForProperty
方法时,调用基实现集装箱属性总是返回为空后:
据ModelMetadata Class
MSDN描述,当模型是一个属性的容器属性不应为空
protected override ModelMetadata GetMetadataForProperty(
Func<object> modelAccessor,
Type containerType,
PropertyDescriptor propertyDescriptor)
{
ModelMetadata metadata = base.GetMetadataForProperty(modelAccessor, containerType, propertyDescriptor);
// metadata.Container always null here
}
在其他的方式,访问来自ViewData
ModelMetadata
时,Container
属性,都会充满预期:
因此,我有几个与这个问题有关的问题:
它是一个预期的行为ModelMetadata.Container从
GetMetadataForProperty
返回空或者是一个错误?有没有办法让
ModelMetadata.Container
属性填充到ModelMetadataProvider中?当ModelMetadata.Container属性实际获取它的内容?
首先感谢您的答案,但我注意到以下行为有点矛盾:每次我点击Html.EditorFor在视图中,我发现它要求GetMetadataForProperty。 ViewData.ModelMetadta.Container在这个调用之前是可用的,所以它在调用后的GetMetadataForProperty内部不可用? –
有趣。前一段时间,我试图解决你遇到的同样问题,并创建了一个包含值类型和复杂对象的模型,该模型又包含一个值类型和一个复杂对象(深度为3级)并进行调试,这表明元数据是从内部属性创建出来的。时间一些更多的测试:) –
@StephenMuecke在这方面的任何决议?参考容器类型会非常有帮助 –