问题标签 [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.
model-view-controller - BindModel() 实现应该做什么?
我一直在阅读MVC 3 源代码,试图了解如果我重写 DefaultModelBinder.BindModel() 甚至实现 IModelBinder.BindModel(),我应该遵循什么语义。
我不清楚 BindModel() 完成工作后应该将其他对象保留在什么“状态”中。当然,假设它返回一个代表对 ValueProvider 数据的某种解释的值,但是它应该有什么副作用呢?例如:
- MVC 是否对 *after* 方法完成后传递给 BindModel() 的 bindingContext 的状态有期望?
- IModelBinder.BindModel() 应该在 ModelMetadata 中设置什么(如果有的话)?(DefaultModelBinder 在其 BindProperty() 方法中设置属性元数据,由 BindModel() 调用。)
- 是否应该覆盖 DefaultModelBinder.BindModel() 调用 ModelState.AddModelError(),或者 BindProperty() 是否覆盖更合适的位置(特别是如果我想尽可能利用 DefaultModelBinder 的默认行为)?
DefaultModelBinder 在其管道中内置了如此多的语义,以至于覆盖任何东西都感觉非常危险(即,我觉得我不能在不违反Liskov 原则的情况下覆盖任何东西)。缺乏文档没有帮助。
asp.net-mvc - 带有表单和列表的 MVC 3:默认模型绑定器和 EditorFor
该模型:
如果我使用默认的 EditorFor(model => model.Entries),则名称/id 值为:
相反,如果我想创建一个 EditorFor 模板,如下所示:
发出的名称/标识值是:
所以名称在属性名称和 [0] 之间有一个句点,并且 id 在索引号的左侧有一个额外的下划线。这不适用于默认模型绑定器。有没有一种方法可以与默认模型绑定器一起使用?
asp.net-mvc - ASP.NET MVC ModelBinder 错误:将请求变量“id”绑定到模型的属性“Id”
我正在使用 MVC 3 最终 RTM。
给定
这条路线:
在帖子的页面上,例如 /blog/posts/2/some-slug 我将部分视图与Comment
模型绑定:
并且Comment
有一个public int Id {get; set;}
.
在部分视图中,我有这个:
为什么会显示这个?
为什么当我更改为时它Id
的值是否正确?Comment
CommentId
0
我认为默认模型绑定器绑定到{id}
路由。
asp.net-mvc-3 - 动态模型和模型状态
我有这样的动作:
Update([Bind(Prefix = "CurrentModel")] dynamic edited)
但是当我使用动态时,ModelState.IsValid
总是返回true,所以看起来动态对象没有验证?如果没有,我该如何解决这个问题?
asp.net-mvc-3 - ASP.Net MVC3 父子模型绑定
我有一个使用用户对象作为模型的部分模板。用户有一组帐户。在这个部分模板上,我有一个如下循环。_Account 部分模板绑定到 Account 类
在我最初尝试的控制器方法中
但是 User.Accounts 集合是空的。然后我尝试了这个。Accounts 集合仍然是空的。
我可以使用默认的 Modelbinder 实现来实现这一点,还是需要做一些不同的事情?
asp.net-mvc-2 - 默认模型绑定器
基本上我有一个包含大约 100 个元素的表单。当我提交表单时,这些值绑定到我的模型。但我想在设置值之前处理表单元素的某些值。基本上我希望表单元素的 95 个值由默认活页夹设置,但我想在设置之前处理五个元素的值。
关于如何通过覆盖默认模型绑定器来执行此操作的任何建议?
c# - 默认模型绑定器不绑定 IEnumerable 中的 Nullable 类型
我有一个控制器动作,其定义看起来像 -
和模型:
在控制器操作中填充了“名称”属性,但SourceId属性仍然为空。哪个destinationId是长的?参数也被填充。
在单步执行 MVC(版本 2)源代码时,这是 DefaultModelBinder 引发的异常。
从类型 'System.Int32' 到类型 'System.Nullable`1[[System.Int64, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]' 的参数转换失败,因为没有类型转换器可以在这些类型。
如果模型更改为 long 而不是 long?,则默认模型绑定器会设置该值。
这是一个已知的问题?由于 MVC 源代码已经过优化,因此我无法单步执行大部分代码。
更新:正在发送的请求是使用 Json 的 Http POST,源 JSON 类似于 -
asp.net-mvc-2 - 默认绑定器的问题(可能很简单)
我正在构建一个 ASP.NET MVC 2 应用程序并有一个包含以下操作的控制器:
为此,我得到了一个如下所示的强类型视图:
当点击提交按钮(代码中未显示)时,将点击公共 ActionResult Edit(EditUser user) 操作,但用户对象将不包含任何数据?
这是 html 的一部分的样子:
这应该意味着输入指向正确的属性。
值得一提的是,我使用 Data annotation 来验证发送到 action 的对象,但即使有几个 requre 字段,模型也始终有效。
知道为什么会这样吗?
asp.net-mvc-3 - 模型绑定器和隐藏字段
我有一个简化的测试场景,对问这个问题很有用:一个产品可以有很多组件,一个组件可以属于很多产品。EF 生成了这些类,我将它们精简如下:
组件的创建是通过这些控制器操作完成的:
GET 方法返回的视图如下所示:
从中可以看出,组件创建是通过上述在同一页面上处理的Html.Action
- 该视图的代码如下:
好的。所以这就是我正在努力解决的问题:我需要model
[HttpPost]back 的参数来正确填充,即它应该包含一个产品,因为我无法使用空产品创建新组件。要获得产品,我需要通过产品的 id 进行查找。我希望我应该能够做到:
或类似的东西,它依赖于model
接收 id。这意味着视图必须将 id 放在那里,大概是在一个隐藏字段中,从我的视图代码中可以看出,我已经多次尝试填充它,但都失败了。
通常我更喜欢 *For 方法,因为它们负责生成正确的命名法。如果 .Products 是单数 (.Product),我可以引用它x => x.Product.Id
,一切都会好起来的,但由于它是复数,我不能这样做x => x.Products.Id
,我尝试x => x.Products.First().Id
编译并产生正确的值但得到名称Id
(这是错误的模型活页夹认为它是Component.Id
而不是Component.Products[0].Id
。
我的第二次尝试是让HiddenFor
迭代(就像我一样EditorFor
):
但这什么也没产生——我读过这个助手不会迭代。我试过x => x.Products.First()
了,但这甚至没有编译。最后,我决定放弃 *For 并自己编写名称:
尽管看起来不错,但回发看不到我的价值(Products.Count
== 0)。我在一些帖子中看到该格式应该看起来像[0].Id
,但这也不起作用。呜呜……
我收集我可以这样编码:
然后像这样重新声明我的控制器操作:
但这似乎很古怪。很难相信这是如此困难。谁能帮忙?
- e
ps 我有一个项目,如果有人关心,我可以下载
c# - .Net MVC3 自定义模型绑定器 - 初始加载模型
我正在创建一个自定义模型绑定器,以在使用传入值更新模型之前从数据库中加载模型。(继承自 DefaultModelBinder)
我需要重写哪种方法才能做到这一点?