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

c# - ASP.NET MVC 默认绑定器:int 太长,空验证错误消息

我有以下模型类(为简单起见被剥离):

这是我使用此模型的 Razor 表单:

现在,如果我在文本框中输入非数字数据,我会收到正确的验证消息,即:“值 'qqqqq' 对于字段'IntData' 无效”。

但是如果我输入一个很长的数字序列(如 345234775637544),我会收到一个 EMPTY 验证摘要。

在我的控制器代码中,我看到这ModelState.IsValidfalse预期的,ModelState["IntData"].Errors[0]如下所示:

如您所见,验证工作正常,但不会向用户产生错误消息。

我可以调整默认模型绑定器的行为,以便在这种情况下显示正确的错误消息吗?还是我必须编写自定义活页夹?

0 投票
1 回答
421 浏览

asp.net-mvc-3 - MS MVC3 模型绑定对象

有人可以帮助我更好地理解 DefaultModelBinder 以及它如何处理绑定具有对象类型属性的模型吗?

我已经下载了代码并尝试跟踪它,但我仍然有点摸不着头脑。

假设我有一个这样的模型:

并假设我的表格都是正确生成的(例如:name="MyModel.MyProperty")

对于实际上将 MyProperty 设置为某些类型的实例的各种情况会发生什么?

在我的例子中,我从 DefaultModelBinder 派生了一个自定义活页夹并重写 CreateModel() 以返回一个 MyModel,并将 MyProperty 设置为正确的类型。

我注意到如果我将 MyProperty 设置为一个字符串,那么由于某种原因 DefaultModelBinder::BindProperty() 会返回一个大小为 1 的字符串 [],其中包含表单字段的内容,而不仅仅是一个字符串。为什么?

如果 MyProperty 是一些更复杂的类型,即使我的表单字段都被正确命名(例如:name="MyModel.MyProperty.FirstName"),绑定似乎根本不起作用。

以前有没有人处理过这样的复杂/抽象模型绑定场景?有没有更好的办法?(我知道这很奇怪,但我确实需要让 MyModel 的 MyProperty 成为对象,因为直到运行时我才知道它实际上是什么类型)

0 投票
2 回答
3595 浏览

asp.net-mvc - MVC3 ModelBinding 到带有索引间隙回发的集合

我的模型上有一组对象,我正在使用 EditFor 函数在视图中呈现这些对象,并且我有一个 EditorTemplate 负责实际呈现每个对象。

这已经有一段时间了,当您检查 html 时,我的文本框以模型属性为前缀,然后是它们来自的集合的索引。

但是,我最近开始在集合的模型元数据中使用 ShowForEdit 和 ShowForDisplay 属性,如果 ShowForEdit 不正确,我会在编辑器模板的第一行中跳过它。

但是因为这些都在 html 中编入索引,所以当我尝试通过回发将此集合保存回视图模型时,由于依赖于索引编号而失败。当我检查它的值时,我的视图模型中缺少索引后集合中的每个项目。

在这种情况下,它实际上是我要跳过的集合中的第一个项目,因为我不希望它在编辑视图中可见,但正因为如此,当我回发时,html 中的第一个索引是 1(而不是 0就像通常那样),但是当您尝试保存更改时,这是一个问题。在使用 javascript 更改 DOM 时,这也是一个问题。

当 html 表示的集合中的一个或多个索引不存在时,是否有其他人遇到默认模型绑定器读取回发数据的问题?

有处理这个问题的模型绑定器吗?

0 投票
1 回答
1189 浏览

asp.net-mvc - 如何使用(尝试)UpdateModel?

使用 (Try)UpdateModel 的正确方法是什么?

当我运行这个:

  • TryUpdateModel返回真,
  • ViewData没有错误,
  • 但我Proxy的没有更新。

动作方法

发布数据

事物类

编辑:我也尝试过明确地传递表单集合 TryUpdateModel(Proxy, TypeName, idontknow)

编辑#2:(回应尼克拉森)

  1. 重新启动VS和服务器,没有变化。
  2. 值实际上在 FormCollection 中。
  3. 模拟数据有效!我知道我一定在这里搞砸了。
  4. 使用调试器检查值。
0 投票
1 回答
1139 浏览

c# - 派生抽象类asp.net mvc的JSON自定义绑定器null

我为抽象类制作了一个自定义活页夹。绑定器决定使用哪个实现。它工作得很好,但是当我将抽象类中不存在的属性添加到子类时,它始终为空。

下面是抽象类Pet和派生类的代码DogCat.

控制器只接受一个Pet参数并将其作为 JSON 返回。

如果我发送

我回来

对于Cat,存在抽象类中不存在的寄生虫属性Pet。如果我发送

我回来

我已经尝试过其他更复杂的类,这只是一个简单的例子。我查看了调试器,parasite值在值提供者中,绑定器返回的模型包含寄生虫的字段。谁能看出问题出在哪里?

0 投票
2 回答
1128 浏览

asp.net-mvc - MVC3 非顺序隐藏输入索引需要先出现吗?

模型绑定的 MVC3 非顺序索引隐藏输入..

他们是否在要发布的其他相关输入之前,之后,中间?
它们在发布数据中的最终位置是否重要?
例如,可以将它们全部放在一起并且仍然有效吗?

0 投票
2 回答
272 浏览

asp.net-mvc-2 - 如何使用 DefaultModelBinder 绑定模型属性 - ASP.NET MVC2

我有以下情况。

  1. 我的 Edit/Employee 视图填充了来自 Entity Framework 实体 (Employee) 的模型
  2. 我从 Edit/Employee 发布到 Save/Employee 控制器操作。Save/Employee 操作需要另一种类型 (EmployeeSave),它具有 Employee 作为属性

这是编辑/员工方法

这是保存/员工方法

这是 EmployeeSave 类

MVC DefaultModelBinder 能够解析 Employee 和 EmployeeSave 类。

0 投票
5 回答
3719 浏览

c# - DefaultModelBinder 无法反序列化作为 JSON 对象传递给操作的 .NET Dictionary 对象?

我有一个非常简单的课程:

我想在客户端的字典中填充数据,然后将其作为 JSON 对象传递给我的控制器操作。但是,无论我在客户端上尝试什么, DefaultModelBinder 似乎都无法反序列化它。

这是调用我的操作的示例 javascript 代码:

这是我的操作方法的简化版本:

请注意,相反的作品。当作为 JsonResult 传递时,FilterItem 对象被成功序列化并作为 JSON 对象传递给客户端。然而,试图反过来是行不通的。

我在 Connect 上阅读了票,并认为解决方法可以解决问题,但事实并非如此。

是否可以使用 ASP.NET MVC 3 中的 DefaultModelBinder 反序列化 .NET 字典?

0 投票
1 回答
525 浏览

asp.net-mvc-2 - DefaultModelBinder Implementation does not populate the model - ASP.NET MVC 2

I have a very simple implementation of the DefaultModelBinder, I need it to fire some custom validation.

MyViewModel is a public sealed class. The model binder is registered in the Global.asax this way:

The problem is that the model is never populated! But the MVC default model binder (I remove the registration in global.asax) works fine.

This is the view HTML:

Every field matches a property of the model.

0 投票
3 回答
21158 浏览

jquery - 如何使用 jQuery 将 int 列表发送到 ASP.net MVC 默认模型绑定器

当我像这样使用 jQuery 发送一个 int 列表时:

然后 jQuery 将转换 pkList 对象并通过邮寄方式发送它,如下所示:

如果服务器是 PHP 但我使用 Asp.NET MVC3 并尝试使用默认模型绑定器获取这些值,这会很好:

但是pkList总是为null,好像默认的model binder无法绑定。

我该如何正确解决这个问题?


添加的 解决方案

我使用 Darin Dimitrov 的解决方案traditional在 jQuery 中设置选项:

现在 jQuery 不再添加[]参数了,它们是这样发送的:

并且 MVC 默认模型绑定器正确获取值。

希望这可以帮助某人。