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

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 原则的情况下覆盖任何东西)。缺乏文档没有帮助。

0 投票
1 回答
1698 浏览

asp.net-mvc - 带有表单和列表的 MVC 3:默认模型绑定器和 EditorFor

该模型:

如果我使用默认的 EditorFor(model => model.Entries),则名称/id 值为:

相反,如果我想创建一个 EditorFor 模板,如下所示:

发出的名称/标识值是:

所以名称在属性名称和 [0] 之间有一个句点,并且 id 在索引号的左侧有一个额外的下划线。这不适用于默认模型绑定器。有没有一种方法可以与默认模型绑定器一起使用?

0 投票
4 回答
938 浏览

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的值是否正确?CommentCommentId0

我认为默认模型绑定器绑定到{id}路由。

0 投票
1 回答
2007 浏览

asp.net-mvc-3 - 动态模型和模型状态

我有这样的动作:

Update([Bind(Prefix = "CurrentModel")] dynamic edited)

但是当我使用动态时,ModelState.IsValid总是返回true,所以看起来动态对象没有验证?如果没有,我该如何解决这个问题?

0 投票
2 回答
7606 浏览

asp.net-mvc-3 - ASP.Net MVC3 父子模型绑定

我有一个使用用户对象作为模型的部分模板。用户有一组帐户。在这个部分模板上,我有一个如下循环。_Account 部分模板绑定到 Account 类

在我最初尝试的控制器方法中

但是 User.Accounts 集合是空的。然后我尝试了这个。Accounts 集合仍然是空的。

我可以使用默认的 Modelbinder 实现来实现这一点,还是需要做一些不同的事情?

0 投票
1 回答
182 浏览

asp.net-mvc-2 - 默认模型绑定器

基本上我有一个包含大约 100 个元素的表单。当我提交表单时,这些值绑定到我的模型。但我想在设置值之前处理表单元素的某些值。基本上我希望表单元素的 95 个值由默认活页夹设置,但我想在设置之前处理五个元素的值。

关于如何通过覆盖默认模型绑定器来执行此操作的任何建议?

0 投票
3 回答
3391 浏览

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 类似于 -

0 投票
1 回答
37 浏览

asp.net-mvc-2 - 默认绑定器的问题(可能很简单)

我正在构建一个 ASP.NET MVC 2 应用程序并有一个包含以下操作的控制器:

为此,我得到了一个如下所示的强类型视图:

当点击提交按钮(代码中未显示)时,将点击公共 ActionResult Edit(EditUser user) 操作,但用户对象将不包含任何数据?

这是 html 的一部分的样子:

这应该意味着输入指向正确的属性。

值得一提的是,我使用 Data annotation 来验证发送到 action 的对象,但即使有几个 requre 字段,模型也始终有效。

知道为什么会这样吗?

0 投票
1 回答
17387 浏览

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 我有一个项目,如果有人关心,我可以下载

0 投票
2 回答
1329 浏览

c# - .Net MVC3 自定义模型绑定器 - 初始加载模型

我正在创建一个自定义模型绑定器,以在使用传入值更新模型之前从数据库中加载模型。(继承自 DefaultModelBinder)

我需要重写哪种方法才能做到这一点?