问题标签 [modelstate]

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

data-binding - ModelState 不包含表单值

我有这个视图模型:

对于这个观点:

这是获取表单的操作:

(对不起希伯来语消息:-D)

问题:如果我查看 formCollection 值,我确实看到了表单详细信息,但由于某种原因,更新模型方法不起作用。我查看了模型状态键,发现它只获得了我传递的路由值(menuItemID)。但为什么?它不应该获取所有表单集合并更新它吗?

我还尝试在隐藏字段中传递 id,以便 modelstate 全部为空...

有任何想法吗 ?

更新:

我改变了这一行:UpdateModel(item);

对此:

现在我知道这不是正确的方法,但同时它可以工作......有没有人知道解决这个问题的方法,所以它也是一个最佳实践?谢谢!

0 投票
1 回答
2187 浏览

asp.net-mvc - 在 TryUpdateModel 之前更新值提供者

假设我们有一个具有名为 PetsName 的属性的类。如果它在屏幕上留空,我想更新值提供者,所以如果用户没有输入宠物名称,我们会强制“未命名”。这不是实际情况.. 这当然是一个示例,因此诸如“仅在网页上设置默认值等”之类的答案不适合这种情况:)

主要问题是我们想要更新值,因此当您更新模型时,它将使用您覆盖的任何内容。我想一个想法是删除该值并添加它。当我检查 ModelState 时,它​​确实有更新的值,但是当我调用 TryUpdateModel 时,该值没有更新。我在下面所做的可能确实是正确的,这里还有另一个问题,但我想我会先试试这个。谢谢!

0 投票
1 回答
173 浏览

asp.net-mvc - 如何防止列表的必填字段中出现 ModelBinder 错误?

我已经从我的数据库中的 EntityFramework 创建了这个对象。

在我的创建视图中,我会做类似的事情

在我的控制器中

问题是 ModelState 总是无效的,因为你只能为所有语言提交一个名称——你没有翻译所有语言的目标——但是这个名称对于 db 是强制性的,所以模型 Binder 会引发错误。

我的问题是:我必须在哪里操作,才能纠正这个错误?
在模型绑定器级别?
在 ModelState.IsValis 调用之前的 Controller 中?如何?

我确信这种情况已经发生在很多人身上,但我找不到一个优雅的、可扩展的解决方案。
谢谢。

0 投票
1 回答
493 浏览

asp.net-mvc - 对集合应用必需的属性验证,IEnumerable

如何在不知道每个集合中有多少元素的情况下将所需属性(如验证)应用于以下内容:

对于 IntCollection,我希望每个元素都是必需的。对于 IntAndStringAllValueCollection,我希望每个键和每个值都是必需的。对于 IntAndStringValueValidationCollection,我不希望 Key 是必需的,但我希望 Value 是必需的。

0 投票
2 回答
135 浏览

asp.net-mvc - 如何验证多部分模型?

我正在处理一个非常大的订单表格,其中包含一堆一次性提交的多部分数据。我正在使用这个技巧,您可以在 HTML 中呈现 30-40 个项目行,并允许用户使用 jQuery 或多或少地“显示”或“隐藏”。

问题是,虽然用户可能有三行“显示”并且他们碰巧完全填写了所有三行,但我的模型永远不会验证,因为还有另外 27 个无效(空)项目被提交。

我的解决方案是说搞砸内置模型验证并使用一些自定义模型验证,例如 ModelState.AddModelError(),但我觉得必须在控制器级别重复我的模型验证。

有没有更好的方法来处理这个?

0 投票
1 回答
1531 浏览

visual-studio-2010 - 手动将文本添加到 html.ValidationSummary?

我对 mvc2 相当陌生,在关注数据注释等方面的文章时,我遇到了一些代码,可以让我手动将一行文本添加到验证摘要中。

我已经搜索了过去 2 或 3 个小时,但我已经到了我认为我只是在寻找错误的东西的地步。它不是我正在寻找的自定义验证器,而是我可以从控制器调用以添加错误消息的东西。

有人知道我在说什么吗?

编辑:稍微澄清一下标题

0 投票
1 回答
4078 浏览

c# - 带有自定义异常的 ASP.NET MVC 2 模型错误

我有一个自定义异常类:

.ToDescription是一种扩展方法,MyExceptionEnum用于为异常错误详细信息提供枚举到字符串的映射。

这是我扔它的方法:

所以我使用我的第一个 ctor,它使用给定的消息创建一个新的异常。

现在进入控制器:

最后是视图中的一个片段:

不起作用(调试时抛出异常,错误被添加到模型状态,但页面上没有显示)。

但是,如果我更改为以下行:

有用。

AddModelError有两个重载:

  1. 字符串,异常(对我不起作用)
  2. 字符串,字符串(有效)

那么第一个重载有什么用呢?我的异常确实有一个内部异常消息,所以我会认为 HTML 扩展会呈现它?

那么我们如何使用 ModelState 处理自定义异常呢?使用第二个重载是否正确?

0 投票
1 回答
1562 浏览

asp.net-mvc - 当 ModelState 在 HttpPost 上无效时,ASP.NET MVC 自动绑定刷新的模型

我正在开发一个 ASP.NET MVC2 应用程序。我开始意识到 MVC 在幕后所做的与 ModelState 和模型绑定有关的一件非常令人惊讶但又令人惊奇的事情。我有一个 ViewModel,它有一大堆数据——一些字段是表单的一部分,而其他字段只是 UI 的一部分。在 HttpPost 上,我的 Action 方法使用 DefaultModelBinder 尝试绑定整个模型,但只有作为表单一部分的字段才能成功反序列化 - 所有其他字段都保持为空。这很好,可以理解。如果 ModelState 无效,我需要从数据库中刷新模型并绑定那些特定的表单字段,然后再返回到相同的编辑视图以显示那些关联的 ModelState 验证错误。

这就是我惊奇和好奇的地方。我的假设是,为了让我将表单字段与刷新的模型绑定,我需要调用UpdateModel()or TryUpdateModel<>(),传入新刷新的模型。例如:

但是,我发现如果我只是返回refreshedModel视图而不调用TryUpdateModel<>()刷新的模型会自动与发布的表单字段值绑定!因此,TryUpdateModel<>()这里不需要!

我能理解它的唯一方法是,由于 ModelState 处于无效状态,一旦我返回带有刷新模型的视图,“MVC 渲染引擎”循环遍历 ModelState 错误并将这些属性值与我刷新的绑定模型。这简直太棒了!但是,我想要证明这个假设。我在网络上的任何地方都找不到有关此的文档。任何人都可以确认我的假设为什么/如何发生这种令人敬畏的自动绑定行为和/或教育我为什么/如何发生,希望有一些在线文档链接支持,以便我更全面地了解幕后发生的事情?

0 投票
1 回答
841 浏览

nunit - 单元测试时模型不会自动验证

这是控制器操作的一部分:

运行应用程序时,模型会在 if 语句被调用之前自动验证。但是,当尝试对此代码进行单元测试时,不会发生自动验证。

如果我要使用 FormCollection 并改为调用 TryUpdateModel,则会进行验证,但我不想使用它。

我发现在 if 语句之前调用 TryValidateModel(model) 可以很好地解决问题;只需要一行额外的代码。不过,我宁愿摆脱它​​。

任何想法为什么在单元测试时不会发生自动验证但在应用程序运行时会发生?

编辑:忘了提,我正在使用 ASP.NET MVC3 RC1,如果这有什么不同,我正在模拟控制器的 HTTPContext 对象

0 投票
2 回答
5637 浏览

asp.net - 如何手动调用 ValidationAttributes?(DataAnnotations 和 ModelState)

我们需要在某些逻辑中迭代模型的属性以自动绑定属性,并希望扩展功能以包含 C# 4.0 中的新数据注释。

目前,我基本上遍历所有 ValidationAttribute 实例中加载的每个属性,并尝试使用 Validate/IsValid 函数进行验证,但这似乎对我不起作用。

例如,我有一个模型,例如:

检查属性的代码是:

我已经调试了代码,模型确实有 3 个属性,其中 2 个是从 ValidationAttribute 派生的,但是当代码通过 Validate 函数(具有空值或 null 值)时,它确实按预期抛出了异常。

我期待我在做一些愚蠢的事情,所以想知道是否有人使用过这个功能并且可以提供帮助。

在此先感谢,杰米