问题标签 [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 投票
5 回答
25080 浏览

c# - 是否可以覆盖模型中属性的必需属性?

我很想知道是否可以覆盖已在模型上设置的 [Required] 属性。我敢肯定这个问题有一个简单的解决方案,任何接受者?

0 投票
2 回答
508 浏览

asp.net-mvc-3 - 在 MVC 3.0 中,将 IsRequired 设置为属性的 ModelMetadata 时,它不会添加验证

我的应用程序中有某些属性需要动态设置,无论它们是否需要,因此我不能使用数据注释的 [Required] 属性。

也许这不是实现我想要的最佳方式。所以在这方面我会接受高兴的建议。我已经用以下内容覆盖了 DataAnnotationsModelMetadataProvider:

这只是一个概念测试,一旦我让它工作,我会将它更改为动态的和更面向对象的东西,但到目前为止,只要能够将属性 DataFieldValue 的 MetadataModel 设置为 IsRequired = true 我就可以开始了。

有了这个,我以动态方式成功地将 IsRequired 属性设置为 true (我想,这样就足够了!),当我在我的视图中调试时:

属性 DataFieldValue 声明如下:

我可以看到元数据的 IsRequired 属性为 true,但是当呈现“DataFieldValue”时,“验证器”不存在,当然验证不起作用。

为了确保我的项目配置没有问题,我检查了 web.config 并包含 javascripts 进行验证,所有配置都正确。更重要的是,如果我将所需的属性添加到我的属性中,如下所示:

验证工作完美!

谁能给我一个提示?或者告诉我我做错了什么?

谢谢!

0 投票
3 回答
5249 浏览

asp.net-mvc-3 - 使用 AutoMapper 将元数据传输到视图模型的技术

我使用 AutoMapper 将我的域对象映射到我的视图模型。我的域层中有元数据,我想将其转移到视图层和 ModelMetadata。(此元数据不是 UI 逻辑,而是为我的视图提供必要的信息)。

现在,我的解决方案是使用单独的 MetadataProvider(独立于 ASP.NET MVC),并使用约定通过 AssociatedMetadataProvider 将相关元数据应用于 ModelMetadata 对象。这种方法的问题在于,在绑定域中的 ModelMetadata 时,我必须测试与使用 AutoMapping 时相同的约定,而且似乎应该有一种方法可以使这更加正交。谁能推荐一个更好的方法来完成这个?

0 投票
2 回答
3085 浏览

asp.net-mvc - 可以浏览 DataAnnotations 的自定义 Html 助手

说我有这样的模型

我想创建一个这样的 Html 助手:

以便它吐出一个具有正确格式的文本字段,以便 jQuery Vaidation 插件能够验证,如下所示:

根据我的研究,似乎没有办法遍历 MetaDataModel 中的所有数据注释,以便我可以检查哪些适用于 jQuery Validation。

我如何设想它在伪代码中工作:

我怎样才能实现这样的助手?我希望它可以处理数据注释,这样我就不必复制验证文字。

例如,当前的 Html 助手(如 TextEditorFor)确实将可验证的属性附加到其输出字段。它是如何做到这一点的,我该如何进行自己的实现?

干杯

0 投票
1 回答
1740 浏览

asp.net-mvc - ASP.NET MVC 3 中的模型元数据提供程序是否支持动态元数据?

我正在尝试在 ASP.NET MVC 3 中实现一些自定义模型元数据。我不能使用数据注释属性,因为某些元数据可能会根据配置的值而改变,所以我需要一个解决方案,让我设置元数据每一个请求。我一直在阅读有关自定义模型元数据提供程序的信息,但我找不到任何有关支持动态元数据方案的信息。

MVC 框架是否缓存来自模型元数据提供程序的元数据,还是会在每个请求上调用 CreateMetadata 方法?自定义模型元数据提供程序是动态元数据的一个很好的解决方案,还是应该将它放在视图模型中?

编辑:这不一定是我正在谈论的验证元数据,所以我不是在寻找特定于验证的解决方案。它可能只是要被视图显示或使用的元数据(例如在 HTML 5 数据属性中)。

另一个示例可能是数据库驱动的字段标签。通常会使用 Display 属性的 Name 属性,但如果您想根据数据库中的值动态设置显示名称,这将不起作用。

0 投票
1 回答
232 浏览

asp.net-mvc-3 - 将模型元数据应用于复杂对象

我有以下情况

现在,当我使用 EditorFor 时,我想在 DateTime 上应用 DataFormatString

上面的代码没有使用 DisplayFormatAttribute 正确呈现日期,那么我该如何解决呢?

0 投票
1 回答
927 浏览

asp.net-mvc-3 - 如何在控制器级别获取模型列表中项目的完整 Html 字段名称?

*第一篇文章

我有一个必须使用的 Ajax 帖子的 JQuery 错误处理程序,它根据该元素的字段名称向 html 附加一个错误,如下所示

在我尝试在控制器级别添加自定义模型状态错误之前,这与我们的流利验证设置完美开箱即用,如下所示:

问题是modelstate错误需要附加到html字段名称而不是我的魔术字符串“City”。html name 属性是 MVC 生成的,看起来像这样:

我之前在html助手中遇到过这个问题并使用了方法:

在那种情况下解决了我的问题。

我的问题是我可以在 MVC 发布操作中对我的模型属性使用此方法来获取它来自的 html 名称属性吗?

提前致谢

0 投票
2 回答
521 浏览

asp.net-mvc - 验证应用程序块 - 如何使用验证元数据类

我正在使用 VAB 来验证一些具有属性的类,并且我正在使用元数据类在不同的类之间共享相同的验证。当我尝试验证控制器中的对象时(顺便说一句,我使用的是 asp.net mvc),ValidationResults没有错误,我的实体不应该是有效的。但是,ASP.NET MVC 发挥了他的魔力,因为ModelState.IsValid它是错误的。我想问题是我进行手动验证的方式。

在 Global.asax 中,我正在加载类和元数据类之间的关联。

全球.ASAX

控制器

或者

欢迎任何想法。

先谢谢了。

0 投票
2 回答
2803 浏览

c# - 如何将元数据添加到动态构建的 MVC3 ViewModel?

我正在处理的一个项目的主要功能之一是用户能够基于预先存在的字段类型(例如众所周知的类型)配置表单(如在“表单”中填写) “用户名”、“出生日期”等,还有“通用类型”,如“字符串”、“日期时间”等)。

我们曾经有一个静态 ViewModel,它适用于“众所周知的”类型,看起来像这样:

列出了所有已知的属性,我们根据上下文显示或隐藏它们。

但是最后一个要求来了,改变了这一切。用户现在可以根据需要添加任意数量的泛型类型字段。为了做到这一点,我们决定让这个 InputModel 完全动态化。现在看起来像这样:

这就像一个魅力。razor 视图只需要遍历集合,为集合的每个属性创建相应的控件,而不是标准的方式:

...我们很好地将数据作为填充表格返回。

=> 这很好用,但我们没有任何客户端验证。为此,我们需要一些元数据......我们不再通过注释获得,因为我们正在动态创建模型。

为了提供这些元数据,我创建了一个CustomModelMetadataProvider继承自Global.asaxDataAnnotationsModelMetadataProvider并将其注册为新的。ModelMetadataProviderCreateMetadata()函数在创建 ViewModel 时被调用,并且对于我的 ViewModel 的每个属性......到目前为止都很好。

问题从哪里开始:为了向当前属性添加一些元数据,我首先需要确定我当前正在查看的属性(“名称”的最大长度为 200,“出生日期”没有,所以我无法分配默认情况下每个属性的最大长度)。不知何故,我还没有设法做到这一点,因为所有属性都具有相同的名称Value和相同的容器类型ModelProperty

我尝试通过反射访问属性的容器,但由于 ModelAccessor 的目标是 ViewModel 本身(因为 lambda 表达式m => m.Properties),以下构造为我提供了整个 ViewModel,而不仅仅是 ModelProperty:

我一直在翻来覆去,但找不到一种方法来识别我手头的 ModelProperty。有没有办法做到这一点?

更新:在所有可能的方向翻转了一段时间后,我们终于走了另一条路。我们基本上使用不显眼的 javascript 来使用 MVC 的验证功能,而无需触及属性或元数据。简而言之,我们将 HTML 属性value-data="true"(以及所有其他必需的属性)添加到@Html.TextBoxFor()语句中。这对于所有原子验证(必需、字符串长度等)都非常有效。

0 投票
1 回答
3611 浏览

asp.net-mvc - MVC Html Helper:来自字符串表达式的模型元数据

我正在尝试构建一个可以访问模型元数据的 html 助手。我需要两个版本的助手才能工作:来自字符串表达式和来自 lambda 表达式:示例:

上面代码的问题是它不适用于复杂类型。例如,如果我的模型看起来像这样:

我的 html 助手将无法读取以下元数据:

我可以让它为接受表达式的助手工作,因为它ModelMetadata.FromLambdaExpression(...)实际上可以很好地处理复杂的对象,但这对我来说还不够。

任何建议表示赞赏。