问题标签 [modelstatedictionary]

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 回答
528 浏览

asp.net-mvc - 什么决定了集合属性项的 ModelStateDictionary 中的键

如果这是我的视图模型:

那么分配给 a 的默认错误消息键是什么ModelStateDictionary

  1. ViewModel.SimpleProperty (请参阅下面的更新)
  2. ViewModel.ComplexProperty (见下面的更新)
  3. ViewModel.ComplexProperty.NestedSimpleProperty (请参阅下面的更新)
  4. ViewModel.ComplexPropertyArray (见下面的更新)
  5. ViewModel.ComplexPropertyArray[0]
  6. ViewModel.ComplexPropertyArray[0].NestedSimpleProperty

更新 我在反射器中发现了这个:

所以,我认为这涵盖了除了#5 和 #6之外的所有内容

0 投票
2 回答
491 浏览

asp.net - 防止在 ModelState 中保留值

再会!

ModelStateASP.NET MVC 通过在内部存储 GET/POST 循环期间的输入值并在出现验证错误时自动将它们放入输入中来做得很好。

但是在我的表单上,我有验证错误期间不应保留的 CAPTCHA 字段(每个请求都会重新生成 CAPTCHA 值)。

我试图通过设置来实现这一点

但它不起作用。

可能有一个属性可以应用于我的模型字段以防止它保留在 ModelState 中?

提前致谢!

0 投票
2 回答
1421 浏览

asp.net-mvc - 防止 ModelState.IsValid 验证附加实体?

有没有办法覆盖ModelState.IsValid

一些要验证的实体只是附加的实体,因此除了 ID 之外的所有字段都不会被验证,因为实体处于 state Unchanged

有没有办法做到这一点?
有没有人遇到过这个问题?

更新

假设我有以下操作:

由于模型验证 的所有属性和所有后代属性entity,因此必须有一种方法来检查这些后代的每个实体,它是否附加到上下文,如果是,则从 中删除错误ModelState,如下所示:

我在上面的伪代码中尝试做的是检查验证链中的实体,如果其中一个附加为Unchanged,则跳过验证/删除其错误。

现在我必须通过检查手动进行硬编码ModelState.Key,我正在寻找一种更通用和更有效的方法。

0 投票
0 回答
78 浏览

validation - 使用 ModelState / ModelStateDictionary 而不是服务层验证检查的原因是什么

在许多在线示例和教程中,我们看到if (!ModelState.IsValid) { return View(model); }或类似的东西。我已经编写了一个ModelState过滤器来在每个动作执行之前进行实际检查。但是内置的组件模型属性非常有限:它们只使用可以在客户端本身进行的检查,不提供唯一性检查、针对数据库的单词过滤等方式。所以我经常发现自己在写我的服务层基础的一个伴侣,它涉及检查服务命令的“输入模型”的规则,如果它未能通过一些更详细的检查,则将其扔回去。

我的问题是,如果我不使用 Microsoft 提供的任何不显眼的 AJAX HTML 帮助程序,我是否有任何理由为非常基本的组件模型属性而烦恼?毕竟,它们要求您创建一个新模型、注释每个字段、使其与域模型保持同步等。

此外,如果使用 有好处ModelState,那么将其连接到服务层验证检查的首选方法是什么?还是人们出于其他原因不这样做?

0 投票
1 回答
163 浏览

asp.net-mvc-4 - MVC 4 ModelState 无效,因为它正在尝试自动填充值而不接受新值

我有评论区。在视图中只有一个评论编辑框。

该模型也有评论链接的课程、日期、评论文本和用户。其他值在 create post 方法中填充。

问题出现在这里。在我实际完成工作并设置它之前,模型试图使用userName参数作为值。courseComment.UserName设置好后ModelState不变。

例如,domain\abc123传入 post 方法并在ModelStatefor中设置UserName。我做了一些工作,更改userNameabc123并找到链接的 ID,假设 ID = 1,给那个具有所述名称的用户,然后将其插入courseComment.UserName ModelState仍然保留domain\abc123在那里并且模型保持无效。

现在,这是原来的工作,然后我改变了底层数据库,主要是列名和一些关系。

我的解决方案。

移动从 post 方法接收用户名

获取方法。

然后将视图更改为

0 投票
0 回答
60 浏览

helpers - 我在哪里添加这个“ControllerHelpers”类?

在一个相当古老的 .NET 教程“Nerd Dinner”中,它谈到了使用 Helper 类来解决规则违规问题。一切似乎都很简单,除了我不确定在哪里放置这个类,所以我可以参考它。我是 MVC 的新手。

以下所有内容均取自书呆子晚餐教程

使用 AddRuleViolations 辅助方法

我们最初的 HTTP-POST Edit 实现在其 catch 块中使用了一个 foreach 语句来循环晚餐对象的 Rule Violations 并将它们添加到控制器的 ModelState 集合中:

我们可以通过向 NerdDinner 项目添加一个“ControllerHelpers”类来使这段代码更简洁,并在其中实现一个“AddRuleViolations”扩展方法,为 ASP.NET MVC ModelStateDictionary 类添加一个帮助方法。此扩展方法可以封装使用 RuleViolation 错误列表填充 ModelStateDictionary 所需的逻辑:

公共静态类 ControllerHelpers {

公共静态无效 AddRuleViolations(此 ModelStateDictionary 模型状态,IEnumerable 错误){

} }

0 投票
0 回答
163 浏览

c# - .NET:ModelStateDictionary 适配器?

因此,我一直在搞乱 .NET 中的验证,试图找到一种在业务层中实现验证的可靠方法(例如这篇MSDN 文章中所讨论的)。

这个想法是我将控制器的 ModelState 传递给业务服务,然后服务执行验证并更新 ModelState。

但是,我注意到的一件事是 ModelStateDictionary 存在于两个不同的命名空间中:

虽然我可以“选择一个”,但我不希望我的业务层对表示层有任何依赖。例如,如果我选择 MVC,则业务服务类需要期待 ModelStateDictionary 的MVC 命名空间版本......这意味着它们将依赖于 MVC 表示层。

所以,我想知道是否有人对如何解决这个问题有建议?

我的尝试是创建一个适配器/接口 IModelStateDictionary,我接近了……但是,Modelstate 使用了一个具有虚拟方法ConvertTo()的ValueProviderResult 类(也是 System.Web.MVC)。我不确定我该如何解决这个问题......可能是一个我还没有学过的简单模式,但以我的经验水平,我不确定它是否真的是一个表演终结者......

...或者我可以以更好的方式解决这个问题?

建议将不胜感激!

谢谢,

克里斯

编辑:下面的代码

0 投票
1 回答
532 浏览

c# - 如何使用禁止状态 web api 返回 ModelState

我们可以ModelState通过BadRequest以下方式从 web api 返回:

它提供以下输出:

如何返回与Forbidden状态相同的输出?

我尝试了以下方法:

但它返回:

Json 序列化ModelSate也不会返回相同的东西。如何将BadRequest()method for使用的序列化方法ModelState与其他状态代码一起使用?

0 投票
1 回答
426 浏览

asp.net-web-api - ModelState.Isvalid 不适用于布尔字段的默认值

网页接口--->

ModelState.Keys 给出以下错误: HasBaseValue,HasFieldValue 如果两个字段都没有提供。为什么即使设置了默认值,它仍然显示在错误字段中。注意:当我通过断点进行调试和检查时,默认值已经填充到“c 对象”中。

0 投票
1 回答
1297 浏览

python - 使用 fast-ai 时如何修复“为 AWD_LSTM 加载 state_dict 时出错”

我正在使用 fast-ai 库来训练 IMDB 评论数据集的样本。我的目标是实现情感分析,我只想从一个小数据集开始(这个包含 1000 条 IMDB 评论)。我已经使用本教程在 VM 中训练了模型。

我保存了模型,然后保存了编码器,然后data_lm保存了分类器学习器。然后,我从 VM 中获取这 4 个文件并将它们放入我的机器中,并希望使用这些预训练模型来对情绪进行分类。data_clasft_encsentiment_model

这就是我所做的:

之后,我想使用该模型来预测句子的情绪。执行此代码时,我遇到了以下错误:

Traceback 是:

所以加载编码器时会出现错误。但是,我也尝试删除该load_encoder行,但下一行发生了同样的错误learn.load('sentiment_model')

我搜索了fast-ai论坛,发现其他人也有这个问题,但没有找到解决方案。在这篇文章中,用户说这可能与不同的预处理有关,尽管我不明白为什么会发生这种情况。

有谁知道我做错了什么?