问题标签 [modelmetadata]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1186 浏览

asp.net - 如何扩展 CachedDataAnnotationsModelMetadataProvider?

我们希望使用CachedDataAnnotationsModelMetadataProvider来提高性能,并且我们在 MVC4 应用程序中使用了大量元数据。

我们目前正在创建一个继承自 DataAnnotationsModelMetadataProvider 的自定义 ModelMetadataProvider 并覆盖CreateMetadata属性来执行一些自动显示名称创建,例如从名称中删除 Id 等。但是我们还想缓存它,因此我们希望将自定义 ModelMetadataProvider 基于 CachedDataAnnotationsModelMetadataProvider。

如果我们试图覆盖CreateMetadata我们不能,因为它是密封的。它被密封的任何原因 - 我想我可以获得源代码并重新实现只是发现我无法扩展很奇怪?

有没有人做过类似的事情?

0 投票
1 回答
234 浏览

c# - 等效于使用反射的“ModelMetadata.IsComplexType”

我正在尝试使用System.Reflection来获得与使用 相同的属性结果metadata,特别是IsComplexType属性。我面临的问题是我找不到 MVC 框架用来确定属性是否复杂的逻辑。我能找到的复杂类型的唯一特征是它是一个类,而不是 .Net 框架的内置类型。在不使用属性的情况下,如何确定(属性)类型是否被视为复杂类型ModelMetadata

0 投票
2 回答
2188 浏览

asp.net-mvc - 在附加的 EditorTemplate 中获取字段的属性

我想为 Int32 制作额外的编辑器模板。在其中我想获取所有属性(自定义/默认数据注释)并使用它们做一些工作:

那么问题来了,如何在 EditorTemplate 中获取属性的所有属性呢?

提前谢谢

0 投票
1 回答
1717 浏览

asp.net-mvc - 如何使用 AutoMapper 和 Betty 的方法将 DataAnnotation 元数据传输到 ViewModel

我需要澄清如何实现 Betty 的代码解决方案,以使用 AutoMapper 将数据注释元数据传输到 ViewModel(请参阅此处)。或者如果你有更好的方法,请分享。对于熟悉 AutoMapper 的人来说,也许 Betty 的答案的实现是显而易见的,但我是新手。

这是一个简单的例子,我应该在这段代码中添加什么来使 Betty 的解决方案起作用:

当前的 AutoMapper 实现:

我在 Application_Start 的 global.asax 中试过这个:

此外,我不得不从以下位置修改 Betty 的 GetMappedAttributes:

propertyMap.DestinationProperty.GetCustomAttributes至: propertyMap.DestinationProperty.MemberInfo.GetCustomAttributes

(或者不是 MemberInfo,它是 MemberType 吗?)甚至可以构建。

但似乎没有任何效果。

0 投票
0 回答
91 浏览

c# - 从 containerType 的实例中获取 AdditionalValues

我有类似的东西:

我的 ViewTermAttribute 在 ModelMetaData 中设置了一些附加值:

我需要的是从我的“名称”属性中获取此信息:

是否可以从容器实例中获取值?

0 投票
1 回答
6919 浏览

asp.net-mvc - Add new Property to MVC ModelMetadata

I'm seeing alternative approaches to this such as AdditionalValues, but I'm wondering if it's possible to end up in a scenario where you can add a new property to the ModelMetadata object available in template views.

For example you could have:

I want to use this in Editor and Display templates to add MVVM attributes to the HTML elements being rendered.

I'm completely lost, but here are my efforts so far:

Then in global asax I use:

The problem is if I try to use MyProperty in the view it isn't recognized, which I anticipated because VS isn't aware of the custom ModelMetadata class.

I'm not even sure this is possible?

0 投票
1 回答
2426 浏览

c# - 使用 IEnumerable GetGenericArguments 获取类型

我开发了一个用于生成显示和可编辑表的 MVC 助手(需要一个 jquery 插件来允许在可编辑表中动态添加和删除具有完整回发的行),例如

与属性一起使用将包括页脚中的总计,为查看和编辑链接添加列,为复杂类型呈现超链接等。例如

我即将在 CodeProject 上发布它,但在此之前,我想解决一个问题。助手首先ModelMetadata从表达式中获取,检查它是否实现ICollection,然后获取集合中的类型(注意以下片段来自 SO 上接受的答案,但如下所述,并不完全正确)

该类型用于生成ModelMetadata表头(表中可能没有任何行)和表体中的每一行(以防某些项目是具有附加属性的继承类型,否则会搞砸列布局)

我希望能够做的是使用而IEnumerable不是不需要在 linq 表达式上调用它。ICollection.ToList()

在大多数情况下IEnumerable工作正常,例如

可以,因为.GetGenericArguments()返回一个仅包含一种类型的数组。问题是某些查询上的 '.GetGenericArguments()' 返回 2 种或更多类型,并且似乎没有逻辑顺序。例如

返回 [0] 集合中的类型,以及 [1] 用于排序的类型。

在这种情况下.GetGenericArguments()[0]仍然有效,但是

返回 [0] 原始集合中的类型和 [1] 的类型AnotherItem

所以.GetGenericArguments()[1]我需要为AnotherItem.

我的问题是,有没有一种可靠的方法使用条件语句来获取我需要呈现表格的类型?

到目前为止,从我的测试来看,除了因为排序键是最后一种类型,使用.GetGenericArguments().Last()在所有情况下都有效。OrderBy()

到目前为止,我尝试过的一些事情包括忽略作为值类型的类型(通常是这种情况OrderBy(),但OrderBy()查询可能使用 a string(可以检查)或更糟糕的是,重载 ==、< 和 > 的类运算符(在这种情况下,我将无法判断哪个是正确的类型),并且我一直无法找到一种方法来测试集合是否实现了IOrderedEnumerable.

0 投票
2 回答
894 浏览

asp.net-mvc - ModelMetadata 附加属性始终为空

我正在尝试访问模型的元数据属性以创建一个帮助程序,以根据 DataAnnotations 自动添加 HtmlAttributes。

问题是,属性总是空的。

我有 2 个基本类可以尝试一个空项目:

这里 model.Description 始终为空, AdditionalValues 字典始终为空。

也许这里缺少一些东西?

这是我在 GitHub 上添加的参考项目:https ://github.com/erickgirard/TestHtmlAttributesHelper

0 投票
1 回答
339 浏览

asp.net-mvc - 本地化模型元数据和缓存

我的本地化模型属性有问题,因为我们决定不使用内置本地化功能。

问题是全球文化可以由用户更改,但 ErrorMessage、DisplayName 和一些东西是由框架缓存的。有什么建议可以解决这个问题并在运行时绑定属性吗?

0 投票
1 回答
996 浏览

c# - ModelMetadata.Container 属性为空

我正在编写一个ModelMetadataProvider扩展 default的自定义DataAnnotationsModelMetadataProvider。不幸的是,我遇到了一个问题: ModelMetadata.Containerproperty 始终为 null。根据 msdn 的描述ModelMetadata Class,当 model 表示一个属性时,容器属性不应该为空:

在此处输入图像描述

但是在覆盖GetMetadataForProperty方法时,在调用基本实现 Container 属性后总是返回为 null:

在此处输入图像描述

另一方面,当从 访问ModelMetadataViewDataContainer属性按预期填充:

在此处输入图像描述

因此,我有几个与此问题相关的问题:

  1. ModelMetadata.Container 返回空的行为是预期的行为GetMetadataForProperty还是错误?

  2. 有没有办法ModelMetadata.Container在 ModelMetadataProvider 中填充属性?

  3. ModelMetadata.Container 属性何时真正获取它的内容?