问题标签 [model-binding]

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 回答
792 浏览

asp.net-mvc - ASP.NET MVC 中的自定义绑定与命名约定

我有一个视图,我在我的文本字段上使用命名约定,以指示一旦将内容发布回我的控制器后应该对内容执行什么操作。

格式类似于:

<input type="text" name="RegistrationLine#ID" /> 更新

<input type="text" name="CreateRegistrationLine#LineNumber" />为创建

现在,由于我使用的是这个命名约定,因此不可能进行常规模型绑定。但是我一直在阅读有关该主题的一些内容,并且确实发现了一些迹象表明可以编写自定义模型绑定器,它应该能够帮助解析和绑定这些表单元素并正确实例化对象。

请阅读:将 formValue 绑定到不同名称的属性,ASP.NET MVC

这有点类似于我正在做的事情,除了我在尝试绑定的 formelement-name 中附加信息的额外复杂性。

我在这里离基地很远吗?如果没有,你们中的任何人都可以删除几行代码来展示如何启动这个模型绑定器。

如果这对于我真正想要实现的目标来说是一个非常糟糕的方法,我很想听听关于更好方法的建议。请注意,我想要做的是一次发回更新和创建。

0 投票
2 回答
1400 浏览

asp.net-mvc - 更改每个控制器的模型绑定器而不是按类型或属性?

我希望能够在每个控制器或每个 ActionMethod 的基础上交换模型绑定器。

AFAIK 框架支持的唯一选项是将模型绑定器绑定到特定类型。

如何以干净的方式更改每个 Controller 或每个 ActionMethod 的模型绑定器?

0 投票
1 回答
444 浏览

c# - 这是 ASP.NET 模型绑定中的错误吗?

我在 ASP.NET MVC 中有一个简单的表单。我正在尝试将这些结果发布到控制器操作中,但我遇到了奇怪的行为。

view是一个简单的 HTML 表格:

视图图片

这是 HTML 表单视图的一部分:

绑定对象:

控制器动作代码:

经过测试,以下是我的观察:

  1. 如果我在每个问题上至少CheckBox选择了一个,那么这可以正常工作并且在我的控制器中updater.questions.Length == 5并且数据完美绑定。

  2. 如果我根本不回答其中一个问题,我只会得到一个与我跳过的数字一样大的数组:-1. 因此,如果我没有回答问题 #3,我会在控制器操作 2 中得到一个数组。

  3. 通过使用#2的逻辑,如果我不回答第一个问题,我只是null得到updater.questions

我想要得到(以及我所期望的)是:

我总是会得到questions一个长度,5并且在我没有回答其中一个问题的情况下,我会简单地0为那个 index 获得一个大小合适的数组responseIds

这是 ASP.NET MVC 模型绑定中的错误吗?如果没有,我是否缺少任何东西或任何方法来获得我正在寻找的所需行为?

0 投票
2 回答
1455 浏览

asp.net-mvc - 列表框中的空值,不在 ASP.NET-MVC 的模型绑定中计算

如果您没有选择至少一个,则模型验证不会评估链接到列表框值的属性。这种方式不可能使用 DataAnnotations 进行模型评估以告知所需的值。

控制器:

风景:

该模型:

任何帮助将不胜感激。谢谢你。

0 投票
1 回答
2136 浏览

asp.net-mvc - 在 ASP.NET MVC 中水合 ViewModel

我有一个由许多用户控件组成的页面。此页面的视图模型相当复杂。

该页面还有一个 PostModel,其中包含用于过滤、排序等信息。

验证简单的 PostModel,然后控制器打开 3 个以上的存储库,对每个存储库进行多次调用并构建视图模型。至少可以说我的控制器动作已经变得相当大了。

这是迄今为止我工作过的最复杂的页面,我很难决定如何使它更简单。

我的第一个想法是创建一个视图模型工厂,在绑定验证之后,它会调用存储库并返回 ViewModel。

然后我考虑创建一个自定义模型绑定器,该绑定器将验证 PostModel,然后一步水合 ViewModel。

所以我的问题是你如何水合一个复杂的视图模型?

在我写这篇文章的时候,我想到了使用 Html.RenderAction 并为构成这个页面野兽的每个用户控件创建一个模型。

更新:

存储库调用 WCF 服务,应用程序是更大 SOA 架构的一部分。

0 投票
1 回答
6012 浏览

asp.net-mvc - ASP.Net MVC:将 JSON 发送到控制器

在 ASP.Net MVC 中向我的控制器发布帖子时,我希望能够发送 JSON 而不是标准 QueryStrings。我的前端工作正常(构建然后提交我的 JSON 对象)。

问题出在控制器端,MVC 框架附带的默认 ModelBinders 不支持这一点。

我已经看到了解决此问题的多种方法,其中之一是应用一个将对象作为参数的过滤器,使用 JSON 库对其进行反序列化,并将其添加到操作参数中。这并不理想。

另一种更好的方法是使用自定义模型绑定器。尽管我所看到的所有模型都假设您只有一个模型,并且这将是一个类而不是一个变量。如果你有多个,它会崩溃。

有人遇到过这种情况么?我的一个想法是,如果我可以简单地覆盖 MVC 如何处理 FormCollection 并在那里拦截,我自己将值添加到集合中,并希望 MVC 能够以正常的方式完成其余的工作。有谁知道这是否可能?

我认为,关键问题在于我的问题不在于绑定,因为我的视图模型与以前的视图模型没有什么不同。问题是从 JSON Post 获取值。

如果我是正确的,MVC 从 QueryString 中获取值并将其放入表单集合中,然后用于 ModelBinding。那么正确的方法不应该是改变 FormCollection 的分配方式吗?

动作示例:

普通绑定有效,JSON 无效,模型绑定器的所有示例也无效。到目前为止,我最好的解决方案是将对象转换为字典并循环遍历每个参数并将其匹配。似乎不太理想。

0 投票
4 回答
26512 浏览

c# - 属性的自定义模型绑定器

我有以下控制器操作:

哪里MyModel看起来像这样:

所以 DefaultModelBinder 应该毫无问题地绑定它。唯一的事情是我想使用特殊/自定义活页夹进行绑定PropertyB,并且我还想重用这个活页夹。所以我认为解决方案是在 PropertyB 之前放置一个 ModelBinder 属性,这当然不起作用(属性上不允许有 ModelBinder 属性)。我看到两个解决方案:

  1. 要在每个属性而不是整个模型上使用动作参数(我不喜欢它,因为模型有很多属性),如下所示:

    /li>
  2. 要创建一个新类型,让我们说MyCustomType: List<int>并为此类型注册模型绑定器(这是一个选项)

  3. 也许要为 MyModel 创建一个活页夹,覆盖BindProperty,如果该属性是"PropertyB"用我的自定义活页夹绑定该属性。这可能吗?

还有其他解决方案吗?

0 投票
2 回答
778 浏览

c# - MVC2 IModelBinder 并将字符串解析为对象 - 我该怎么做?

我有一个名为 Time 的对象

所以我想要的是编辑或创建操作上的自动模型绑定,以从字符串设置这个 Time 实例(即用字符串提供 Parse 方法并返回结果)。

我这样做的原因是我将有一个可选择时间的 DropDownList。每个选项的值将是解析器可读的字符串。

任何人都可以从 IModelBinder 接口提供示例 BindModel 方法吗?

0 投票
1 回答
236 浏览

asp.net-mvc - 通过多个键对存储库中的对象进行模型绑定

假设以下路线:

这两个参数region共同storehouse标识了一个实体 - a Storehouse。因此,在某个仓库的上下文中调用了一堆控制器。我想写这样的动作:

在这里,我可以读到您的想法:“编写自定义模型活页夹,伙计”。我愿意。然而,问题是

如何避免自定义模型绑定器中的魔术字符串?
这是我当前的代码:

如果只有一个键,则bindingContext.ModelName可以使用...
可能还有另一种方法可以为所有操作提供Storehouse对象,即将其声明为控制器的属性并将其填充到Controller.Initialize.

0 投票
0 回答
1074 浏览

asp.net-mvc - 使用新的“For”HTML 帮助器时,ViewModel 方法会干扰 MVC 2 中的 ModelBinding

我正在使用 .net MVC 2.0 并设置了一个接收自定义 ViewModel 对象的编辑视图。ViewModel 是一个具有两个属性的类:

在我看来,有一个表格用于更新投资组合对象。SelectList 被传递,因此我可以有一个与投资组合相关的部门的下拉列表。这里没有什么特别的,和我在 1.0 中所做的完全一样。

当我使用新的 TextBoxFor 和 DropDownListFor 辅助方法时,问题就出现了。

我正在这样设置它们:

它们分别产生以下 HTML 输出:

法律

请注意,name 和 id 属性现在带有“Portfolio”前缀。我认为这是因为它们源自“model.Portfolio.X”。这似乎干扰了我在 Edit ActionResult 的 Controller 中应用模型绑定的能力。

动作结果如下:

我怎样才能(a)停止在视图中应用“组合”前缀,或者(b)让 ModelBinding 使用它。

谢谢,

麦克风