问题标签 [custom-model-binder]
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 - 用于日期时间本地化的自定义 ModelBinder
我在 ASP.NET MVC 站点上有一个表单,我最近将它从 POST 更改为 GET。但是,当我完成此操作时,我意识到相关操作中的 DateTime 参数现在有效地使用了不同的文化 - en-US 用于 GET,而不是 en-GB 用于 POST。所以基本上日期和月份都在切换。
以下文章向我解释了为什么要这样做,但是我需要找到一种方法来克服它,而无需在提交之前恢复为 POST 或使用 JS 修改表单。
http://xhalent.wordpress.com/2011/05/14/localization-of-dates-in-asp-net-mvc/ http://weblogs.asp.net/melvynharbour/archive/2008/11/21/ mvc-modelbinder-and-localization.aspx
我为 DateTime 创建了一个自定义活页夹,只是为了试验一个理论,但这样做似乎已经解决了这个问题。谁能解释为什么这有效?
自定义活页夹基本上是 global.ascx.cs 中的以下行
这对于 DateTimeModelBinder 类
asp.net-mvc - 将依赖项注入自定义模型绑定器并使用 InRequestScope 使用 Ninject
我将 NInject 与 NInject.Web.Mvc 一起使用。
首先,我创建了一个简单的测试项目,我希望IPostRepository
在同一个 Web 请求期间在控制器和自定义模型绑定器之间共享一个实例。在我的真实项目中,我需要这个,因为我遇到了IEntityChangeTracker
问题,我实际上有两个存储库访问同一个对象图。所以为了让我的测试项目简单,我只是想共享一个虚拟存储库。
我遇到的问题是它适用于第一个请求,仅此而已。相关代码如下。
NInject 模块:
自定义模型绑定器:
全球.asax:
这样做实际上是创建 2 个单独的实例IPostRepository
而不是共享实例。关于将依赖项注入我的模型绑定器,我在这里缺少一些东西。我上面的代码基于NInject.Web.Mvc wiki中描述的第一种设置方法,但我都尝试过。
当我确实使用第二种方法时,IPostRepository
只会为第一个 Web 请求共享,之后默认不共享实例。然而,当我真正开始工作时,我使用的是默认值DependencyResolver
,因为我一生都无法弄清楚如何对 NInject 做同样的事情(因为内核隐藏在 NInjectMVC3 类中)。我是这样做的:
我怀疑这只是第一次起作用的原因是因为这不是通过 NInject 解决它,所以生命周期实际上是由 MVC 直接处理的(尽管这意味着我不知道它是如何解决依赖关系的)。
那么我该如何正确注册我的模型绑定器并让 NInject 注入依赖项呢?
asp.net-mvc - 修改后如何在继承自 DefaultModelBinder 的自定义模型绑定器中重新验证模型?
我有一个继承自 DefaultModelBinder 的自定义模型绑定器。我想要它做的是在模型上设置一个不能由 DefaultModelBinder 解决的属性。它看起来像这样:
但是,由于 IFooModel 中的 Bar 属性不能为空,并且我使用 FluentValidation 的规则说,在我调用 base.BindModel 后 ModelState 将无效。
因此,我想避免在调用 base.BindModel 时验证模型,或者至少在设置 Bar 属性后清除错误并重新验证模型。
我已经尝试解析验证器并验证模型,但我似乎无法让它实际运行验证,并且它不会导致任何错误(即使它应该):
在我返回模型之前运行它之后,验证器包含一个 FluentValidationModelValidator,但是当我调用 validator.Validate 时,我没有收到任何错误。我的模型上有另一个属性,它在我之前运行 base.BindModel 时确实导致了错误,所以我希望这里会发生同样的错误。
asp.net-mvc - 一个自定义模型绑定器到 CreateModel,另一个到 BindModel?
背景: 在我的 MVC 回发操作方法中,我接收的是命令对象而不是视图模型。这个想法是这些命令对象(大致相当于事务脚本)将在进入操作方法时设置并准备好执行,模型绑定器具有在执行过程中使用的设置参数:
为了让事情变得更复杂一些,我的命令对象具有依赖项(服务、存储库等),这些依赖项在它们各自的构造函数中是必需的;所以我必须创建一个自定义模型绑定器,它使用默认的 DependencyResolver(已经用我的 IoC 容器设置)来构造模型对象:
并Global.asax.cs
像这样设置:
同样,这一切正常,依赖项被注入构造函数,然后默认模型绑定器接管以照常设置属性。
问题: 我遇到的问题是我的所有命令对象都有一个“SessionId”GUID 参数(来自 cookie),他们做的第一件事是尝试使用注入的服务从这个 id 解析会话对象。
我想删除这个重复,所以我创建了第二个模型绑定器,它将负责在存储库中进行此查找,这意味着我的命令对象可以Session
直接具有一个属性(删除会话存储库的构造函数依赖项)。
我的Global.asax.cs
文件现在看起来像这样:
在单独测试了 SessionModelBinder 之后,我知道它可以工作。但是,当将它与 DependencyModelBinder 结合使用时,它永远不会被调用。如何让 MVC 在构造模型对象时使用我的 DependencyModelBinder,但在绑定会话属性时让它使用我的 SessionModelBinder?或者有人知道更好的方法吗?
c# - 如何控制自定义模型绑定器的尝试值?
我有一个带有这样签名的动作:
这是这样实现的:
基本上,我将原始值绑定到枚举,非常简单。工作正常。
但是,请注意如何为了访问尝试的值,我需要使用一个魔术字符串(“myEnum”)。
有什么办法可以将它提供给模型活页夹,所以删除魔术字符串?
因为如果我想在其他地方使用这个模型绑定器,那么我必须确保我调用参数“myEnum”,否则会导致运行时错误。
我尝试在模型绑定器中添加一个 ctor,但实际上我没有在任何地方实例化它。
有任何想法吗?
asp.net-mvc - 如何在我的 MVC 应用程序中处理来自 Postmark 的大量 JSON 输入?
这与这个问题有关,但在这种情况下,它不是我要返回的东西,而是模型绑定。我正在使用Postmark来处理传入的电子邮件,这些电子邮件会发布到带有JSON 有效负载的页面。
我有一个如下模型和一个接收这个 JSON 有效负载(与 application/json 一起发布)并处理它的操作。
这适用于小型附件,但对于超出默认 maxJsonLength 属性的任何内容都会导致反序列化错误。(“使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错。字符串的长度超过了 maxJsonLength 属性上设置的值。”)因为我想接受图像附件,这意味着大多数图像都失败了。
我已经尝试更新 web.config,但是根据其他线程,这对 MVC 控制器没有帮助。我想我可能可以做自定义 IModelBinder 中提到的事情,但我正在努力解决如何拦截反序列化。(换句话说,它仍然失败,因为反序列化已经发生了)。
有什么建议么?我敢肯定,我错过了一些愚蠢的东西......
asp.net-mvc-3 - Ninject/MVC3 自定义模型绑定器 - 激活错误
我正在尝试将我的会话字典类的依赖注入到我的控制器的构造函数中。例如:
在我的 global.asax 文件中:
我的 SessionDictionaryBinder:
当我转到 /account/login 时,我收到错误消息:
我将 Ninject 用于 DI,并且我在 App_Start 目录中包含的文件中的其他绑定工作正常。我假设模型绑定器应该进入该文件,但语法是什么?
干杯!
asp.net-mvc - MVC3 模型与 Castle 绑定
我对 MVC 很陌生。我正在使用 aninterface
作为我的模型的属性。
我注意到我Data Annotation Attributes
的被忽视了。我在提交表单时也遇到了错误:
无法创建接口的实例。
我很快发现我将不得不使用自定义ModelBinder
我很难弄清楚在CreateModel
方法中需要做什么ModelBinder
我有以下内容RegistrationModel
:
这是IPlace
接口和实现:
asp.net-web-api - ASP.Net Web API 模型绑定不像在 MVC 3 中那样工作
我的印象是,ASP.Net Web API 中的模型绑定应该支持与 MVC 支持的最低功能级别的绑定。
采取以下控制器:
我要求它:
不幸的是,模型没有像在 MVC 中那样绑定。为什么这不像我期望的那样具有约束力?我的应用程序中将有很多不同的模型类型。如果绑定能正常工作就好了,就像在 MVC 中一样。
asp.net-mvc-3 - 具有 DataAnnotation 支持的 IModelBinder
我们必须使用实现 IModelBinder 的自定义 ModelBinder。我们根本无法直接更改此代码。它目前不支持从传入的模型的 DataAnnotations 更新 ModelState。我们希望继承 ModelBinder 并添加该支持。我们需要做些什么来添加该支持,以便它像 DefaultModelBinder 与 DataAnnotations 一样工作?