modelAccessor"参数是什么?-6ren"> modelAccessor"参数是什么?-它是提供给 CreateMetadata 方法的参数之一(如果扩展元数据支持,则需要覆盖该方法)。 ModelMetadata CreateMetadata(IEnumerable attribute-6ren">
gpt4 book ai didi

asp.net-mvc-2 - MVC 的 DataAnnotationsModelMetadataProvider 中的 "Func modelAccessor"参数是什么?
转载 作者:行者123 更新时间:2023-12-02 11:07:47 26 4
gpt4 key购买 nike

它是提供给 CreateMetadata 方法的参数之一(如果扩展元数据支持,则需要覆盖该方法)。

ModelMetadata CreateMetadata(IEnumerable<Attribute> attributes,
Type containerType,
Func<object> modelAccessor, <<--THIS ONE
Type modelType,
string propertyName)

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

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

如果我误解了,谁能解释一下它的目的是什么?或者说,如何正确使用它?

谢谢

最佳答案

我们最初将其视为“对象模型”,而不是“Func modelAccessor”。我们必须在 MVC 2 发布周期的后期更改它。

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

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

关于asp.net-mvc-2 - MVC 的 DataAnnotationsModelMetadataProvider 中的 "Func<object> modelAccessor"参数是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3412392/

26 4 0