问题标签 [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.

0 投票
0 回答
164 浏览

asp.net-mvc - 自定义绑定属性

有没有办法实现自己的 BindAttribute。最好从 BindAttribute 派生,但是如果您需要在自己的 ModelBinder 中实现它,您将如何做呢?

0 投票
1 回答
503 浏览

asp.net-mvc - 将日期时间分解为组成部分 ASP.NET MVC 形式

我已经无情地在网上搜索这个并且没有找到任何东西 - 这令人惊讶,因为我认为这是一个如此普遍的情况!

基本上,在我的模型上,我有一个DateTime希望用户通过表单填充的字段。我正在使用 Html 帮助器来呈现表单的所有其他部分(以及验证)

所以这个问题分为两部分......

html 助手

首先,有什么方法可以使用 Html 帮助器将DateTime字段拆分为日期的三个组成部分:日、月、年(因为我不关心时间部分)。这可以呈现为文本框、下拉列表或两者的组合。

模型绑定

然后在发布表单时,将备份绑定到模型的最佳方法是什么?我已经看到了Scott Hanselmann对此的解决方案,但对于我需要的东西来说似乎有点臃肿 - 我希望有一个更优雅的解决方案。是否建议扩展DefaultModelBinder并将其设置为默认活页夹(因为所有日期都将以这种方式处理)或编写一个实现IModelBionder并将其设置为该类型的默认活页夹的DateTime类?

感谢您提前提供的所有帮助 :-) 我很喜欢 MVC,但让我很生气的是,如此微不足道的事情却引起了如此多的头痛!

0 投票
2 回答
894 浏览

asp.net-mvc-2 - ASP.Net MVC 2 - 更好的字典模型绑定

在某些特殊情况下,您将需要一个文本框列表(用于处理 n - n 个关联),其 id 在运行前是未知的。像这样的东西: http: //screencast.com/t/YjIxNjUyNmU

在那个特定的示例中,我希望将计数与我的一些“模板”相关联。

ASP.Net MVC 1中,我编写了一个 Dictionary ModelBinder 以获得干净直观的 HTML。它允许这样的事情:

这是活页夹的代码:

传递给ASP.Net MVC 2时,问题是ValueProvider不再是字典。没有办法像我一样循环遍历这些值来解析它们。

而且我没有找到任何其他方法(如果您知道,请告诉我)。

我终于切换到绑定字典的“标准”方式,但 HTML 很丑陋,违反直觉(使用计数器循环非索引集合??)并且所有值都是必需的,这与我需要的行为不同(而且在 ASP.Net MVC 1) 中完美运行。

它看起来像这样:

在控制器中,我需要欺骗ModelState以避免“需要值”错误:

这太棘手了。我很快将需要多次使用这种绑定,并且可能需要一些层级的开发人员在应用程序上工作。

问题 :

  • 你知道一种让它变得更好的方法吗?

IMO,我需要的是一个用于字典的 ModelBinder,它允许更好的 html 并且不考虑所有值都是必需的。

0 投票
1 回答
412 浏览

asp.net-mvc-2 - 模型绑定和派生模型类

当您拥有从其他人继承的模型类时,ASP.NET MVC 是否提供任何简单的方法来使模型绑定工作?

在我的场景中,我有一个强类型为List<Person>.

我有几个继承自 的类Person,即PersonTypeOnePersonTypeTwo

我有三个强类型的局部视图,它们的名称与这些类名匹配(并为它们各自模型的属性呈现表单元素)。

这意味着在我的主视图中,我可以拥有以下代码:

这很好用,除了当用户提交表单时,相关的控制器操作方法只是得到一个List<Person>,而不是Person,PersonTypeOne和的列表PersonTypeTwo

这与预期的差不多,因为表单提交不包含足够的信息来告诉默认模型绑定器创建任何实例PersonTypeOnePersonTypeTwo类。

那么,有没有办法从默认的模型绑定器中获得这样的功能呢?

0 投票
2 回答
1425 浏览

asp.net-mvc - ASP.NET MVC - 将子实体绑定到模型

这对我来说似乎很痛苦,但由于某种原因,我无法让它按照我想要的方式工作。也许我这样做是不可能的,但这似乎不太可能。这个问题可能有点相关:ASP.NET MVC Model Binding Related Entities on Same Page

我有一个 EditorTemplate 来编辑具有多个相关实体引用的实体。呈现编辑器时,会为用户提供一个下拉列表以从中选择相关实体,下拉列表返回一个 ID 作为其值。

发送请求时,表单值按预期命名:“Entity.ID”,但是我定义为操作参数的强类型模型没有填充请求中传递的值的 Entity.ID。

我尝试摆弄 Bind() 属性并Bind(Include = "Entity.ID")在 entityWithChildEntities 上指定,但这似乎不起作用。我也尝试过Bind(Include = "Entity"),但这导致 ModelBinder 尝试绑定完整的“实体”定义(不足为奇)。

有没有办法让默认模型绑定器填充子实体 ID,或者我需要为每个子实体的 ID 添加操作参数,然后手动将值复制到模型定义中?

0 投票
3 回答
11591 浏览

asp.net-mvc - ASP.NET MVC - 接口类型上的自定义模型绑定器

我不确定这种行为是否是预期的,但是当绑定分配给接口类型时,自定义模型绑定似乎不起作用。有没有人尝试过这个?

当我绑定到 SomeModel 类型的模型时,使用上面的代码,MyCustomModelBinder 永远不会被命中;但是,如果我更改上面的代码并替换typeof(ISomeModel)typeof(SomeModel)发布完全相同的表单 MyCustomModelBinder 会按预期调用。这看起来对吗?


编辑

在我最初提出这个问题一年多之后,我发现自己又回到了这个困境中,现在我有了一个可行的解决方案。谢谢马特·希丁格!

http://www.matthidinger.com/archive/2011/08/16/An-inheritance-aware-ModelBinderProvider-in-MVC-3.aspx

0 投票
1 回答
113 浏览

validation - 我可以在自定义模型绑定器中使用 MVC 验证属性吗?

我的模型上有很多 MVC 验证属性。当 defaultModelBinder 在提交时绑定我的模型时,一切都很好。但是,我需要创建一个自定义模型绑定器。我想继续使用我的验证属性。我可以吗?如果是这样,怎么做?

0 投票
1 回答
755 浏览

validation - MVC 2,自定义 ModelBinder,并为视图存储“尝试值”

我有一个对象,该对象以前从服务器到客户端往返并很好地返回(即编辑和查看表单工作正常)。但是,我已向该对象添加了一个复杂类型,并制作了一个自定义 ModelBinder 来处理它。复杂类型可以表示为单个字符串,但在对象中存储为 Decimal(认为“0 ft. 3in.”可以存储为 0.25)。

但是,我的问题是验证失败时。如果用户键入“asdf”,则验证失败。但是存储在十进制中的只是 0。因此,当视图被渲染并发送给用户时,他们只会看到“0”和错误消息,而不是看到“asdf”。我的默认 ModelBinder 没有这个问题(其他字段往返无效字符串就好了),所以我必须在我的自定义 ModelBinder 中遗漏一些东西......但它是什么?

我试过打电话

但它似乎不影响任何事情。

0 投票
2 回答
6365 浏览

c# - ASP.NET MVC 模型绑定到列表中

在我的 ASP.NET MVC 站点中,部分功能允许用户输入某个场所开放的时间。

我决定将这些时间存储在我的数据库中的 VenueHours 表中,并具有与 Venues 表的 FK 到 PK 关系,以及 DayOfWeek、OpeningTime 和 ClosingTime 参数。

在我看来,我想让用户只输入他们知道的时间;换句话说,有些日子可能无法填写场地。我正在考虑创建复选框,用户可以检查该复选框以启用复选框所属的 DayOfWeek 的 OpeningTime 和 ClosingTime 字段。


我的问题涉及如何将此信息传递给我的 HttpPost Controller Action

因为我知道可以传入 (7) 的最大天数,我当然可以将 7 个可为空的 VenueHour 参数写入我的 Action,但我确信有更好的方法。

我可以以某种方式将 View 信息绑定到传递给我的 Action 的 List 中吗?如果我遇到用户可以填写多少信息没有限制的情况,这也会对我有所帮助。

0 投票
1 回答
1102 浏览

asp.net-mvc - ASP.NET MVC:使用 HtmlHelper.TextBox 和自定义模型绑定器的空引用异常

我写了一个实现的类IModelBinder(见下文)。此类处理具有 3 个输入的表单,每个输入代表日期值(日、月、年)的一部分。我还写了一个相应的HtmlHelper扩展方法来打印表单上的三个字段。

当日、月、年输入被赋予可以解析的值,但单独的值验证失败时,一切都很好 - 字段被重新填充并且页面按预期提供给用户。

但是,当提供了无效值并且DateTime无法解析 a 时,我会返回任意值DateTime,以便在返回给用户时重新填充字段。

我阅读了人们遇到的类似问题,他们似乎都是由于缺乏电话SetModelValue()。我没有这样做,但是即使添加了问题也没有解决。

当我尝试为日期的 Year 属性创建一个文本框时,会引发空引用异常,但奇怪的是不是为 Day 或 Month!

谁能解释为什么会这样?