问题标签 [defaultmodelbinder]

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

asp.net-mvc - ASP.NET MVC Beta 1:DefaultModelBinder 在不相关的请求之间错误地保留参数和验证状态

当我使用默认模型绑定将表单参数绑定到作为操作参数的复杂对象时,框架会记住传递给第一个请求的值,这意味着对该操作的任何后续请求都会获得与第一个请求相同的数据。参数值和验证状态在不相关的 Web 请求之间保持不变。

这是我的控制器代码(service代表对应用程序后端的访问):

我的 .aspx 视图(强类型为ViewPage<RunTime>)包含如下指令:

这使用了DefaultModelBinder该类,该类旨在自动绑定我的模型的 properties

我点击页面,输入有效数据(例如时间 = 1)。该应用程序正确保存了时间 = 1 的新对象。然后我再次点击它,输入不同的有效数据(例如时间 = 2)。但是,保存的数据是原始数据(例如时间 = 1)。这也会影响验证,所以如果我的原始数据无效,那么我以后输入的所有数据都被认为是无效的。重新启动 IIS 或重建我的代码会刷新持久状态。

我可以通过编写自己的硬编码模型绑定器来解决这个问题,下面显示了一个基本的简单示例。

我错过了什么吗?我不认为这是浏览器会话问题,因为如果在一个浏览器中输入第一个数据而在另一个浏览器中输入第二个数据,我可以重现该问题。

0 投票
4 回答
18512 浏览

asp.net-mvc - 当参数为模型时,ASP.NET MVC 发布文件模型绑定

有没有办法让发布的文件 ( <input type="file" />) 参与 ASP.NET MVC 中的模型绑定,而无需手动查看自定义模型绑定器中的请求上下文,也无需创建仅将发布的文件作为输入的单独操作方法?

我原以为这会起作用:

但考虑到上述情况,MyFile它甚至不是绑定上下文中值提供者值的一部分。OtherProperty当然是。)但如果我这样做,它会起作用:

那么,为什么当参数是模型时没有发生绑定,我怎样才能让它工作呢?我对使用自定义模型绑定器没有任何问题,但是如何在自定义模型绑定器中执行此操作而不查看Request.Files["MyFile"]

为了一致性、清晰性和可测试性,我希望我的代码能够自动绑定模型上的所有属性,包括绑定到已发布文件的属性,而无需手动检查请求上下文。我目前正在使用Scott Hanselman 所写的方法测试模型绑定。

还是我以错误的方式解决这个问题?你会如何解决这个问题?或者由于 Request.Form 和 Request.Files 之间的分离历史,这是设计上不可能的?

0 投票
6 回答
16776 浏览

asp.net-mvc - Asp.Net MVC中带有千位分隔符的十进制值

我有一个自定义模型类,其中包含一个小数成员和一个接受此类条目的视图。在我添加 javascripts 来格式化输入控件中的数字之前,一切都运行良好。格式代码在焦点模糊时用千位分隔符','格式化输入的数字。

问题是我的模态类中的十进制值没有用千位分隔符很好地绑定/解析。当我使用“1,000.00”对其进行测试时,ModelState.IsValid 返回 false,但它对“100.00”有效,没有任何更改。

如果您对此有任何解决方案,可以与我分享吗?

提前致谢。

样本类

样品控制器

示例视图


正如 Alexander 建议的那样,我尝试了使用 Custom ModelBinder 的解决方法。问题解决了。但该解决方案与 IDataErrorInfo 实现并不顺利。由于验证,当输入 0 时,Salary 值变为空。请问有什么建议吗?Asp.Net MVC 团队成员会来 stackoverflow 吗?我能从你那里得到一点帮助吗?

按照 Alexander 的建议,使用自定义模型绑定器更新了代码

模型粘合剂

员工类

0 投票
1 回答
3809 浏览

asp.net - 带有嵌套列表的 ASP.NET MVC DefaultModelBinder

我有一个带有代表员工时间表的表格的视图。上方的天数,下方的项目,每天/项目交叉点包含两个值,分别表示正常工作时间和加班时间。

页面模型的(简化的)类定义是:

页面上的表单元素命名如下,以尝试让 DefaultModelBinder 获取它们。

然而,当视图被提交时,model参数并没有被完全填充。model.Projects包含项目,但Project'WorkUnits字段为空。是否DefaultModelBinder像我想要的那样支持嵌套集合?如果没有,我该怎么办?

0 投票
4 回答
994 浏览

asp.net-mvc - ASP.NET MVC:将表单 POST 绑定到参数时避免紧耦合

假设我有一个类似的界面:

在 ASP.NET MVC 中,我有一个表单可以发布到这样的控制器操作:

SimpleThing是一个具体的类,几乎没有实现IThing 。

但是,我希望我的所有方法都可以处理接口。我有一个使用 NIBerate 和它自己的IThing实现的数据程序集(我们称之为RealThing)。我无法将 SimpleThing 传递给它,因为它会抱怨“未知实体”。

有没有人对更清洁的方法有任何想法?我正在考虑使用工厂类的方法。但是我如何让 MVC 表单绑定器使用它呢?

谢谢!

0 投票
2 回答
2351 浏览

asp.net-mvc - 带有接口的 ASP.NET MVC UpdateModel

我试图让 UpdateModel 填充在编译时仅设置为接口的模型。例如,我有:

另请注意,我有一个继承自 DefaultModelBinder 的自定义模型绑定器,该绑定器使用覆盖的 CreateModel 方法中的 StandardProfile 实例填充 IProfile。

问题是FavoriteFood 和FavoriteMusic 永远不会被填充。有任何想法吗?理想情况下,这一切都将在模型绑定器中完成,但我不确定如果不编写完全自定义的实现是否可行。

谢谢,布赖恩

0 投票
3 回答
1961 浏览

asp.net-mvc - 将反射创建的对象与默认模型绑定器一起使用的 ASP.NET MVC 问题

我在 ASP.NET MVC 中遇到了一个奇怪的问题,当传递一个formCollection时,对象没有被UpdateModel更新。当通过反射创建要更新的对象时, UpdateModel似乎无法正常工作。

场景:我有一个应用程序,它有大约 50 个查找表——每个查找表都包含完全相同的模式,包括 id、title、description、isactive 和 createdon 等典型字段。我不想构建 50 个视图,而是想要一个可以显示所有查找表中的数据的视图。我创建了一个名为 IReferenceEntity 的接口,并在代表我的查找表的每个 POCO 中实现了它。

使用此界面,我可以轻松地使用查找表中的记录填充视图。(我通过以下方式将项目传递给视图。)

从数据库到视图,每件事都完美无缺。

但是,当我尝试在帖子上更新模型时,我遇到了一些问题。

如果我像下面这样显式声明一个对象引用,那么每件事都会完美运行,并且我的对象的值会使用我的表单中的值进行更新。因此,我可以更新数据库。

不幸的是,硬编码对象类型将完全破坏使用接口的原因。

(应用程序的主要目标是能够动态添加新表,例如查找表,而无需执行任何“特殊”操作。这是通过反映加载的程序集并定位实现特定接口或基类的任何类来实现的)

我的策略是在回发时确定对象的具体类型,然后通过反射创建该类型的实例。(我用来确定类型的机制有些原始。我将它作为隐藏字段包含在表单中。欢迎更好的想法。)

当我通过以下任何方法使用反射创建对象的实例时,UpdateModel 都不会更新任何对象。

注意:我已经验证通过重新选择创建的对象都是正确的类型。

有谁知道为什么会发生这种情况?我有点难过。

如果我真的很“努力”,我可以创建工厂对象,它可以实例化这些引用实体/查找对象中的任何一个。但是,这会破坏应用程序允许透明地添加和发现新查找表的能力,而且不够干净。

此外,我可以尝试从实际的 ReferenceEntity 基类而不是接口派生,但我怀疑这是否会产生任何影响。问题似乎与在模型绑定器中使用反射创建的对象有关。

任何帮助表示赞赏。

安东尼

0 投票
1 回答
628 浏览

asp.net-mvc - DefaultModelBinder:IList 与列表

我不确定这是错误还是功能。我有一个带有一些字符串属性的 ListRequest 对象的操作参数。.NET MVC 尽职尽责地将同名的查询字符串参数映射到 ListRequest 对象的属性。

我添加了一个 ListRequest.Filters 属性,它是从查询字符串中获取的字符串列表: ?filter=foo&filter=bar

如果我将 .Filters 声明为 List(Of String) 类型的 Get/Set,DefaultModelBinder 将完全符合您的预期。但是,如果我将 .Filters 声明为 IList(Of String) 的 Get/Set,则 DefaultModelBinder 会完全停止将值绑定到该属性。

这是一个功能,还是一个错误?

0 投票
2 回答
1369 浏览

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

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

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

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

我希望我可以简单地写

0 投票
3 回答
270 浏览

asp.net-mvc - 将项目从 asp.net mvc 1.0 迁移到 asp.net mvc 2 beta 时,某些单元测试失败

当我使用 eric lipton 提供的这个应用程序从 Steve Sanderson 的 Pro ASP.NET MVC 框架(从 asp.net 1.0 到 mvc 2 beta)迁移示例 SportsStore 应用程序时,一切正常 - 除了 2 个单元测试。
两者的错误消息是:
Tests.CartControllerTests.VeryLongTestMethodName:
System.ArgumentNullException: value can't be undefined。
参数名称:context

我怀疑这是因为版本 2 中的默认模型绑定器支持 DataAnnotations,因为来自 NUnit 的堆栈调用跟踪告诉我 DefaultModelBinder 中的一些问题。有什么想法可以解决吗?
编辑
尝试使用起订量来解决问题,但没有奏效。这是代码:

我正在测试的方法只提交 POST。可以将“POST”放到我的测试中吗?