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

asp.net - 通过异步更新 ValidationSummary - ASP.NET MVC

在我的控制器中,如果模型状态无效

我想更新 ValidationMessage 但不必重新发布视图。似乎是带有验证消息的理想概念。我也在使用 DataAnnotations ,<% Html.EnableClientValidation(); %>但它仍然发布到控制器,我必须执行此检查。有什么建议的实现吗?

0 投票
2 回答
21242 浏览

c# - 刷新 ModelState 以消除错误

刷新模型状态

嗨,我有一个关于 ASP.NET MVC 控制器中的 ModelState 的问题。

当用户从视图中选择某个选项时,“认证”的开始日期和结束日期将基于输入的其他日期来设置。

问题是认证日期返回为空,并且我们的 CertificationMetaData 类将字段指定为 [Required],因此一旦加载操作,ModelState 就无效。

手动删除 ModelSate 错误可以让它工作,但我想知道是否有更好的方法来做到这一点?有没有办法刷新 ModelState?我应该使这些字段不需要吗?或者我应该使用 javascript 从视图中添加日期值吗?

正如您所看到的,我已经硬编码了认证类型的 ID 值。将值与查找表值进行比较的最佳方法是什么?枚举是最好的方法吗?

谢谢

0 投票
3 回答
953 浏览

c# - POST 后 HTML.CheckBox 保持状态 - 刷新 ModelState?

我有一个由许多项目组成的表格(想想亚马逊订单上的订单项目)。每行都有一个与之关联的复选框,因此用户可以选择许多项目并单击“删除”。

表格的构建有点像这样;

模型活页夹发挥了它的魔力,并且正确填充了列表。但是,在我处理操作中的请求(例如删除适当的项目)并返回包含较少项目的新视图后,表单的状态是“半”持久化。一些复选框保持选中状态,即使在编辑模型中所有布尔值都设置为 false。

如果我返回 a ,我没有这个问题RedirectToActionResult,但是使用它作为解决方案似乎有点棘手。

我想我需要刷新/刷新 ModelState 或类似的东西,但我不确定要搜索的术语以找出方法。

0 投票
10 回答
118296 浏览

asp.net-mvc - Asp.net MVC ModelState.Clear

谁能给我一个关于 ModelState 在 Asp.net MVC 中角色的简洁定义(或一个链接)。特别是我需要知道在什么情况下需要或需要调用ModelState.Clear().

有点开放,嗯......对不起,我认为如果告诉你我正在做什么可能会有所帮助:

我在一个名为“页面”的控制器上有一个编辑操作。当我第一次看到更改页面详细信息的表单时,一切都加载正常(绑定到“MyCmsPage”对象)。MyCmsPage.SeoTitle然后我单击一个按钮,该按钮为 MyCmsPage 对象的一个​​字段 ( )生成一个值。它生成良好并更新对象,然后我使用新修改的页面对象返回操作结果,并期望<%= Html.TextBox("seoTitle", page.SeoTitle)%>更新相关的文本框(使用 渲染)......但可惜它显示了来自加载的旧模型的值。

我已经通过使用来解决它,ModelState.Clear()但我需要知道它为什么/如何工作,所以我不只是盲目地这样做。

页面控制器:

ASP:

0 投票
9 回答
157961 浏览

c# - ModelState.IsValid == false,为什么?

我在哪里可以找到使 ModelState 无效的错误列表?我没有在 ModelState 对象上看到任何错误属性。

0 投票
2 回答
1369 浏览

asp.net-mvc - 在 ASP.NET MVC 2 中测试模型绑定

第一的; 我知道我不需要测试 MVC 的内部,但我真的需要一个套件来测试流入我们系统的数据。

我希望在不模拟所有 HTTP 上下文的情况下如何测试 objectA(表单集合、字典、集合、对象等)是否符合 objectAModel?

我不想实例化我的控制器或调用动作。我只是想测试我的新对象是否使模型状态无效。

我希望我可以简单地写

0 投票
2 回答
6802 浏览

asp.net-mvc - 如何从模型状态中获取错误消息

我正在使用

以及如何在控制器本身中获取此模型状态值。

就像我需要在控制器中获取“测试”的错误消息。

0 投票
3 回答
8334 浏览

asp.net-mvc - ASP.NET MVC:DataAnnotations - 显示指示字段必须是数字的错误消息

DataAnnotations 的工作方式似乎存在一些漏洞,因为用户将一些文本输入到将进入 int 的字段中将永远无法到达 DataAnnotations 代码。它启动模型绑定错误并向用户显示错误“值'a'对于 XXXX 字段无效。”

无论如何,它自动处理这种情况非常好,但我实际上想显示一条指示问题的错误消息,例如。“值 'a' 不是数字。请在 XXXX 字段中输入数字值”。

我已经尝试了如何替换 Asp.net MVC 2 中的默认 ModelState 错误消息中的解决方案?ASP.NET MVC - 值类型的自定义验证消息,但我无法让它们工作。

看来我的资源文件根本没有被读取,因为在这里(http://msdn.microsoft.com/en-us/library/system.web.mvc.defaultmodelbinder.resourceclasskey.aspx)它声明“如果属性设置为无效的类键(例如不存在的资源文件),MVC 抛出异常。” 即使我将行更改为 DefaultModelBinder.ResourceClassKey = "asdfasdhfk" 也不例外。

有人有想法么?

编辑:这是一些代码。减去我的 Messages.resx 文件的消息没有被使用,所有这些都在工作。Messages.resx 的代码是自动生成的,所以我不会包含它。

因此,在 ProcessOrder 中输入“a”会生成一条通用消息,而不是我在 Messages.resx 中为 PropertyValueInvalid 输入的信息(以及 InvalidPropertyValue 为良好的衡量标准)。

Application_Start 方法

实体类

控制器动作:

0 投票
2 回答
996 浏览

asp.net-mvc - IOC on IValidationDictionary 与温莎城堡

我是温莎城堡的新手,我只是使用最新版本。我已经为我的存储库创建了运行良好的条目,但是我有一个最终依赖项,我将其传递到我的控制器中。

我创建了一个继承自 IValidationDictionary 的 ModelStateWrapper。ModelStateWrapper 在其构造函数中采用 ModelStateDictionary ,因此在我的代码中,我可以将以下内容作为示例传递:

在我的测试中,我可以使用 Moq 执行此操作:

我似乎无法让 Castle 用 ModelStateWrapper 注入 ModelState。我不知道从哪里开始,似乎我不能只是“忽略它”并尝试手动注入,因为 Castle 正在搜索依赖项并向我抛出一个错误,说存在依赖项。

如何配置 Castle Windsor 以使用基于 IValidationDictionary 的 ModelStateWrapper 并将 ModelState 作为构造函数参数?

劳埃德

0 投票
1 回答
2741 浏览

c# - 带有 GET/POST 方法和 try-catch 块的 ASP.NET MVC ModelState

我在让 MVC 模型状态与网站上的登录过程一起工作时遇到了一些问题。我有一个典型的登录屏幕,其中包含用户名和密码字段。帐户控制器有 2 种方法来处理登录。第一个是名为“LogOn()”的 Get 方法,它只返回登录视图(即用户名/密码),第二个也称为“LogOn(FormCollection values)”,但它具有 [AcceptVerbs(HttpVerbs.Post )] 指定的。

因此,如果用户尝试在没有输入用户名和/或密码的情况下登录,则 post 方法会对此进行检查,并通过 ModelState.AddModelEror() 将错误添加到 ModelState。这是发生的第一件事,在验证之后,如果 ModelState.IsValidated() 为 false,那么我只返回 View()。

现在,这很好用,如果其中一个为空白,则页面将返回并使用 HtmlValidationMessage(keyName) 显示正确的错误消息。问题是,在验证之后,我会进行实际的登录调用以启动提供的用户名/密码的身份验证过程,该用户名/密码包含在 try/catch 块中。如果在这个过程中发生错误,我想将错误添加到 ModelState,并返回 View(),就像我上面做的那样。错误已成功添加到 ModelState 中,并且 View 正在正确地运行代码,但在那之后,不知何故调用了 Get Logon() 方法,然后覆盖所有内容并只显示 View,就好像它是用户第一次访问该页面!

所以整个代码过程类似于下面发布的:

任何有关此过程为何以这种方式工作的帮助或见解将不胜感激,谢谢!