问题标签 [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.
asp.net - 如何扩展 CachedDataAnnotationsModelMetadataProvider?
我们希望使用CachedDataAnnotationsModelMetadataProvider
它来提高性能,并且我们在 MVC4 应用程序中使用了大量元数据。
我们目前正在创建一个继承自 DataAnnotationsModelMetadataProvider 的自定义 ModelMetadataProvider 并覆盖CreateMetadata
属性来执行一些自动显示名称创建,例如从名称中删除 Id 等。但是我们还想缓存它,因此我们希望将自定义 ModelMetadataProvider 基于 CachedDataAnnotationsModelMetadataProvider。
如果我们试图覆盖CreateMetadata
我们不能,因为它是密封的。它被密封的任何原因 - 我想我可以获得源代码并重新实现只是发现我无法扩展很奇怪?
有没有人做过类似的事情?
c# - 等效于使用反射的“ModelMetadata.IsComplexType”
我正在尝试使用System.Reflection
来获得与使用 相同的属性结果metadata
,特别是IsComplexType
属性。我面临的问题是我找不到 MVC 框架用来确定属性是否复杂的逻辑。我能找到的复杂类型的唯一特征是它是一个类,而不是 .Net 框架的内置类型。在不使用属性的情况下,如何确定(属性)类型是否被视为复杂类型ModelMetadata
?
asp.net-mvc - 在附加的 EditorTemplate 中获取字段的属性
我想为 Int32 制作额外的编辑器模板。在其中我想获取所有属性(自定义/默认数据注释)并使用它们做一些工作:
那么问题来了,如何在 EditorTemplate 中获取属性的所有属性呢?
提前谢谢
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 吗?)甚至可以构建。
但似乎没有任何效果。
c# - 从 containerType 的实例中获取 AdditionalValues
我有类似的东西:
我的 ViewTermAttribute 在 ModelMetaData 中设置了一些附加值:
我需要的是从我的“名称”属性中获取此信息:
是否可以从容器实例中获取值?
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?
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
.
asp.net-mvc - ModelMetadata 附加属性始终为空
我正在尝试访问模型的元数据属性以创建一个帮助程序,以根据 DataAnnotations 自动添加 HtmlAttributes。
问题是,属性总是空的。
我有 2 个基本类可以尝试一个空项目:
这里 model.Description 始终为空, AdditionalValues 字典始终为空。
也许这里缺少一些东西?
这是我在 GitHub 上添加的参考项目:https ://github.com/erickgirard/TestHtmlAttributesHelper
asp.net-mvc - 本地化模型元数据和缓存
我的本地化模型属性有问题,因为我们决定不使用内置本地化功能。
问题是全球文化可以由用户更改,但 ErrorMessage、DisplayName 和一些东西是由框架缓存的。有什么建议可以解决这个问题并在运行时绑定属性吗?
c# - ModelMetadata.Container 属性为空
我正在编写一个ModelMetadataProvider
扩展 default的自定义DataAnnotationsModelMetadataProvider
。不幸的是,我遇到了一个问题:
ModelMetadata.Container
property 始终为 null。根据 msdn 的描述ModelMetadata Class
,当 model 表示一个属性时,容器属性不应该为空:
但是在覆盖GetMetadataForProperty
方法时,在调用基本实现 Container 属性后总是返回为 null:
另一方面,当从 访问ModelMetadata
时ViewData
,Container
属性按预期填充:
因此,我有几个与此问题相关的问题:
ModelMetadata.Container 返回空的行为是预期的行为
GetMetadataForProperty
还是错误?有没有办法
ModelMetadata.Container
在 ModelMetadataProvider 中填充属性?ModelMetadata.Container 属性何时真正获取它的内容?