问题标签 [modelbinders]
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.
asp.net-mvc - 带有接口的 ASP.NET MVC UpdateModel
我试图让 UpdateModel 填充在编译时仅设置为接口的模型。例如,我有:
另请注意,我有一个继承自 DefaultModelBinder 的自定义模型绑定器,该绑定器使用覆盖的 CreateModel 方法中的 StandardProfile 实例填充 IProfile。
问题是FavoriteFood 和FavoriteMusic 永远不会被填充。有任何想法吗?理想情况下,这一切都将在模型绑定器中完成,但我不确定如果不编写完全自定义的实现是否可行。
谢谢,布赖恩
asp.net-mvc - 将反射创建的对象与默认模型绑定器一起使用的 ASP.NET MVC 问题
我在 ASP.NET MVC 中遇到了一个奇怪的问题,当传递一个formCollection时,对象没有被UpdateModel更新。当通过反射创建要更新的对象时, UpdateModel似乎无法正常工作。
场景:我有一个应用程序,它有大约 50 个查找表——每个查找表都包含完全相同的模式,包括 id、title、description、isactive 和 createdon 等典型字段。我不想构建 50 个视图,而是想要一个可以显示所有查找表中的数据的视图。我创建了一个名为 IReferenceEntity 的接口,并在代表我的查找表的每个 POCO 中实现了它。
使用此界面,我可以轻松地使用查找表中的记录填充视图。(我通过以下方式将项目传递给视图。)
从数据库到视图,每件事都完美无缺。
但是,当我尝试在帖子上更新模型时,我遇到了一些问题。
如果我像下面这样显式声明一个对象引用,那么每件事都会完美运行,并且我的对象的值会使用我的表单中的值进行更新。因此,我可以更新数据库。
不幸的是,硬编码对象类型将完全破坏使用接口的原因。
(应用程序的主要目标是能够动态添加新表,例如查找表,而无需执行任何“特殊”操作。这是通过反映加载的程序集并定位实现特定接口或基类的任何类来实现的)
我的策略是在回发时确定对象的具体类型,然后通过反射创建该类型的实例。(我用来确定类型的机制有些原始。我将它作为隐藏字段包含在表单中。欢迎更好的想法。)
当我通过以下任何方法使用反射创建对象的实例时,UpdateModel 都不会更新任何对象。
注意:我已经验证通过重新选择创建的对象都是正确的类型。
有谁知道为什么会发生这种情况?我有点难过。
如果我真的很“努力”,我可以创建工厂对象,它可以实例化这些引用实体/查找对象中的任何一个。但是,这会破坏应用程序允许透明地添加和发现新查找表的能力,而且不够干净。
此外,我可以尝试从实际的 ReferenceEntity 基类而不是接口派生,但我怀疑这是否会产生任何影响。问题似乎与在模型绑定器中使用反射创建的对象有关。
任何帮助表示赞赏。
安东尼
asp.net-mvc - mvc中的模型绑定
我在表单中有一个文本框。
[看法]
[控制器]
On Form Submit 在这种情况下,没有发送任何 ViewData,文本框的值被保留。但是“某事”的值没有设置。
但是当我将 Action 更改为 [Controller]
该值未保持。
真的发生在那个参数上。
asp.net-mvc - MVC 模型绑定:为方法参数使用不同于 QueryString 的名称
给定一个 URL:
http://www.stackoverflow.com/question?问=123&答案=5
及其对应的ActionMethod和Model:
请注意,QueryString 和 RequestObject 的参数是不同的。我可以使用默认绑定行为来实现吗?我需要创建自定义活页夹吗?
谢谢!
asp.net-mvc - MVC 如何调用一个动作并将 Request.Form 映射到它的参数
我需要创建类似于 MVC 如何调用 Method(Action) 的方法,还需要使用 Model Binder 将 NamedValueCollection 映射到该方法的参数。基本上我有一个需要动态调用类上的方法的控制器操作,控制器具有以表单或查询字符串发送的任何信息以及作为字符串调用的方法的名称。
就我而言,这与调用动作相同。我本质上是将它传递到另一个层次(顺便说一句,我不能在控制器上使用这些方法是有充分理由的)。
我下载了 ASP.Net MVC 1.0 Source 但是有一堆类,我很难找到处理这个的代码。
我知道如何调用名称包含在字符串中的方法,但也许 MVC 使用了更好的方法。我还需要知道如何使用模型绑定器为该方法参数制作 Request.Form + Query Strings。
如果有人可以指出 MVC 源代码中执行此操作的代码,或者指出我手动在 MVC 中使用默认模型绑定器的正确方向,我将不胜感激。
让我知道我是否可以更清楚地说明这一点。
谢谢
asp.net-mvc - 为自定义模型绑定器获取 FormCollection out controllerContext
我有一个很好的函数来获取我的 FormCollection(由控制器提供)。现在我想做一个模型绑定,并让我的模型绑定器调用该函数,它需要 FormCollection。由于某种原因,我可以找到它。我以为会是
controllerContext.HttpContext.Request.Form
asp.net-mvc - ModelBinder 中没有通过的一些字段
以下是我的控制器的代码:
调用的视图具有对 Actor 类进行强类型化的局部视图。出于某种原因,有一些字段未绑定到该类。有问题的字段是地址、地址 2 和邮政编码。它们填充在页面上,但它们返回为空。其他所有领域都在那里,只是没有这些。
有任何想法吗?另外,我怎么能写一个单元测试来复制这种行为?
更新 公共类 Actor { public string MiddleName{ get; 放;}
asp.net - ASP.net MVC v2 - 调试模型绑定问题 - BUG?
我在尝试调试为什么 MVC 在给定情况下无法正确绑定时遇到了很多困难...
基本上,我的动作接收一个复杂对象,该对象又具有一个复杂的子对象 - Activity.Location.State (其中 Activity 是动作期望的复杂对象, Location 是一个复杂的子对象,而 State 只是一个字符串) .
现在我建立了一个测试项目,据我所知,它完全模仿了我所拥有的实际场景,在这个测试用例中,绑定有效……但在我的实际项目中,绑定到 Activity 有效,但不绑定到 Location……通过在 Locaiton 属性中放置断点,我可以看出 MVC 正在从 Activity 中检索复杂的 Location 对象,但它没有设置任何属性......
我正在尝试调试该问题,但我需要访问我似乎无法追踪的 MVC v2 preview 2 符号......我想看看它在拉出位置对象后实际在做什么(对于某些原因我认为它可能会在内部失败但会吞下异常)。
关于我可以在这里做什么的任何想法......
干杯安东尼
更新:
好的,我按照 JW 的建议做了,直接引用了 MVC 项目……
我发现了这个问题,并且我忽略了一个非常小的差异......结果我发现 MVC 目前在模型绑定方面不支持多级 INTERFACE 继承......请参阅以下内容......
因此,我发现 MVC 找到 Location 并将其元类型读取为 ILocation,但是当 GetModelProperties 在 DefaultModelBinder 中运行时,会发生以下情况 -
因此,我现在假设 TypeDescriptionProvider 不支持这种继承方式,对此我感到非常惊讶。还查看 v1 源代码,它看起来像是 v2 引入的 - 但 v1 可能无法支持我正在尝试做的事情。
我不会说这真的是一个错误,但我尝试用具体的类替换我的接口并且它工作得很好。因此,这种行为并不是我所期望的,而且有点不一致。
有什么想法吗???我会认为这种继承不是相当标准,但会经常发生,足以满足要求。谢谢回复。
干杯
asp.net-mvc - 我需要 DataAnnotations v 3.5 的 DataAnnotationsModelBinder
我需要一个可以与 System.ComponentModel.DataAnnotations v 3.5 一起使用的 DataAnnotationsModelBinder
我在 codeplex 上找到了一个,但它适用于 DataAnnotations 的 v 0.99,它不适用于 v 3.5,而且我的 xVal 不适用于DataAnnotations v 0.99,所以我有点卡住了
c# - 在 defaultmodelbinder 中覆盖 updatecollection
DefaultModelBinder
当我将实体与子集合绑定而不是更新现有子实体时,我在创建新实体时遇到问题。我在这篇文章中找到了一个不错的解决方案,但我不想更改 MVC 源代码。有人能告诉我如何在我的项目中覆盖这个方法,以便我的自定义UpdateCollection
总是被默认调用吗?