加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-2 – MVC的DataAnnotationsModelMetadataProvider中

发布时间:2020-12-15 22:40:01 所属栏目:asp.Net 来源:网络整理
导读:它是提供给CreateMetadata方法的参数之一(如果扩展元数据支持,您将覆盖它). ModelMetadata CreateMetadata(IEnumerableAttribute attributes,Type containerType,Funcobject modelAccessor,--THIS ONE Type modelType,string propertyName) 我假设它允许您访
它是提供给CreateMetadata方法的参数之一(如果扩展元数据支持,您将覆盖它).
ModelMetadata CreateMetadata(IEnumerable<Attribute> attributes,Type containerType,Func<object> modelAccessor,<<--THIS ONE
                             Type modelType,string propertyName)

我假设它允许您访问模型对象本身(例如,用于基于模型值设置元数据),但是当我尝试使用它来转换到我的模型对象时,我只是为空.

Entity ent = (Entity)modelAccessor(); // = Null

如果我错过了,任何人都可以解释它的目的是什么?或者,如何正确使用它?

谢谢

解决方法

我们最初把它当做“对象模型”,而不是“Func modelAccessor”.我们不得不在MVC 2的船周期之后改变它.

目的是延迟检索模型的实际值,直到你知道你将需要它(即,直到你调用ModelMetadata.Model)为止.

它解决的问题实际上是一个相当深奥的一个相关的模型绑定一个LINQ to SQL类,其中有一个外键引用.问题是,如果您检索到由外键关系表示的子对象(通常意味着该对象的延迟加载),则不再允许通过设置外键来选择新的子对象ID属性.在模型绑定时,建模绑定外键ID(而不是整个外键实体)是很常见的,但是如果我们检索到外键实体对象(为了填充ModelMetadata类),那么该绑定就不再是合法的,实际上是抛出一个例外.由于ModelMetadata用于模型的两个方向 – 通过模型绑定和出站,通过HTML生成 – 我们需要引入间接层,以保护您在两种情况下使用它的能力,而不会中断LINQ to SQL的规则.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读