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

asp.net-mvc - 模型绑定和显示修剪后的字符串属性

我的强类型视图继承自使用 Linq to SQL 创建的“Person”对象。在我的“编辑”视图中,我当然必须显示旧值:

“FirstName”是 NCHAR,因此需要修剪。所以我最终得到:

这有效。但是当提交表单时(在 POST 之后)并且出现一些错误,我需要再次显示它:

如果由于某种原因用户将文本框“FirstName”留空,则结果属性 Person.FirstName 变为null并且 Model.FirstName.Trim() 引发异常(对象引用未设置为对象的实例)。

有什么方法可以修改绑定并默认修剪所有字符串?或者有什么想法可以解决这个问题

更新:似乎已确认是 MVC 2 行为.. 仍在寻找处理此问题的好方法。实际上使用扩展方法:

0 投票
1 回答
941 浏览

asp.net-mvc - DefaultModelBinder 嵌套级别+其他绑定器的问题

我有我认为有点正常的情况,我需要将表单帖子绑定到“订单”模型。这个模型有几个层次的信息:

使用 DefaultModelBinder,如果我将表单发布到以该 Order 模型作为参数的操作,则以下字段 JustWork(TM):

该字段不:

我的皱纹与乡村财产有关。在我们的例子中,Address.Country 返回一个 Country 类实例(ISO2/3/Name/Code 逻辑)。它不是一个字符串。默认情况下它不起作用也就不足为奇了。

我的第一个想法是创建一个 CountryModelBinder(继承 DefaultModelBinder)和 ModelBinders.Binders。将其添加到 Country 的类型中。当我这样做时, CountryModelBinder 永远不会在上面的场景中被调用。

我的第二个想法是创建一个 AddressModelBinder(继承 DefaultModelBinder)并将其绑定到我们的 Address 类型。尽管确实会调用它,但“Country”的 SetProperty 调用具有一个空值,即使该表单已发布了一个名为“Billing.Address.Country”的字段。

经过一番修改后,模型绑定行为似乎仅在模型是操作所需的顶级类时才调用 CreateModel,并且所有其他绑定器都为子属性调用了它们的 BindPropery/SetProperty。

换句话说,如果我为 Order、OrderAddress(Billing)、Address 和 Country 创建模型绑定器。对于接受订单的操作,仅调用 OrderModelBinder.CreateModel。某些事情会调用 ORderAddress 和 Address.BindProperty/SetProperty,有时 SetProperty 值参数在明确发布在与其他字段属性映射匹配的名称中时为空。

只需向 OrderModelBinder 添加代码即可将 Billing.Address.Country 从 Request.Form 中拉出,这很容易。但是我有多个使用 Address 的模型,并且让所有模型都这样做似乎坏了。

我在这里想念什么?在这种情况下,有没有办法让 CountryModelBinder 真正被调用?我认为当 Billing.Address.Country 映射到地址绑定器的 Country 属性时,应该调用 CountryModelBinder。

0 投票
3 回答
1801 浏览

asp.net-mvc-2 - 使用抽象类的 Asp.Net MVC 2 DefaultModelBinder 错误

我有一个使用抽象类的简单 Poco 模型,它似乎不适用于 Asp.net MVC 2 的默认 ModelBinder。一个项目在一个集合中有多个对象,都使用相同的抽象基类。

模型:

实例:

在 Objects 集合中使用带有一个 TextObject 的该项目的 Default Html.EditorForModel() Helper 我得到一个像这样的 html 输入字段:

回发到控制器时,我从默认 ModelBinder 收到“无法创建抽象类”错误消息。显然,活页夹试图实例化那个抽象基类。但是我不知道为什么,因为集合中只有一个继承的TextObject类型的对象。有没有其他方法可以在不编写自定义 Modelbinder 的情况下使其工作?

0 投票
1 回答
1413 浏览

asp.net-mvc-2 - 派生对象列表的 MVC2 Modelbinder

我想要一个在 Asp.net MVC 2 中使用 Default Modelbinder 的不同(派生)对象类型的列表。

我有以下视图模型:

并且该列表包含不同派生类型的对象,例如

不管我是使用 List 还是 ArrayList 实现,所有的东西都在表单中很好地搭建起来,但是当回发到 ActionResult 时,modelbinder 不会为我解析派生对象类型属性。

什么可能是 Viewmodel 结构处理不同对象类型列表的好解决方案?为每种对象类型(例如 List、List 等)提供一个额外的列表对我来说似乎不是一个好的解决方案,因为这在构建视图模型并将其映射回域模型时都会产生很多开销。

考虑在自定义模型绑定器中绑定所有属性的另一种方法,我怎样才能在此处使用数据注释方法(验证所需属性等)而无需大量开销?

0 投票
1 回答
651 浏览

asp.net-mvc-2 - 需要帮助将 DefaultModelBinder 用于嵌套模型

有一些相关的问题,但我找不到有效的答案。

假设我有以下模型:

和一个扩展的视图,ViewPage<EditorViewModel>它执行以下操作:

我的控制器看起来像:

如何让 DefaultModelBinder 正确绑定我的 EditorViewModel?没有做任何特别的事情,我得到了一个 EditorViewModel 的空实例,其中所有内容都为 null 或默认值。

我最接近的是UpdateModel手动调用:

这成功更新了我的 Account 属性模型,但是当我调用 UpdateModel account(以获取我的 EditorViewModel 的其余公共属性)时,我得到完全没有帮助的“类型的模型......无法更新”。没有内部异常,所以我无法弄清楚出了什么问题。

我该怎么办?

0 投票
1 回答
527 浏览

c# - 模型绑定自定义类型

我有一个结构很像 System.Nullable 类型:

我正在尝试将它与 ASP.NET MVC 绑定一起使用。使用默认的客户模型绑定器,该属性将始终产生空值。我可以通过在每个表单输入名称的末尾添加“.Value”来解决这个问题,但我只是希望它直接使用某种自定义模型绑定器绑定到新类型,但我尝试过的所有解决方案似乎都不必要地复杂. 我觉得我应该能够扩展默认绑定器,并使用几行代码使用隐式转换将属性绑定重定向到整个模型。我不太了解默认绑定器的绑定范例,但它似乎真的停留在模型和模型属性之间的这种区别上。最简单的方法是什么?谢谢!

0 投票
1 回答
356 浏览

c# - 测试 DefaultModelBinder 时出现 NullReferenceException

我正在使用 BDD/TDD 技术开发一个项目,并且我正在尽最大努力坚持到底。我刚刚遇到的一个问题是对 DefaultModelBinder 进行单元测试。我正在使用 mspec 编写我的测试。

我有一个这样的类,我想绑定到:

这是我构建规范上下文的方式。我正在构建一个假表单集合并将其填充到 bindingContext 对象中。

最后,当我从我的一个规范中执行 .BindModel() 时,我的规范引发了一个空引用异常:

任何线索可能是什么?

如果需要,请随时向我询问更多信息。我可能认为某些事情是理所当然的。

0 投票
1 回答
209 浏览

asp.net-mvc - 我应该对 DefaultModelBinder 返回的模型进行单元测试吗?

我在对 DefaultModelBinder 返回的模型进行单元测试时遇到了一些麻烦。我想输入一个假的表单集合并检查它返回的模型,以确保模型属性被正确绑定。在我的研究中,我不会在测试 DefaultModelBinder 时使用任何资源。也许我错过了一些东西。也许我不应该测试 MVC 的这一部分?你的意见?

0 投票
1 回答
649 浏览

asp.net-mvc - asp.net mvc 模型绑定器会以正确的顺序保留已发布的数组吗?

所以我有一个数字数组,我要发布到一个 asp.net mvc 动作,它有一个 list(of integer) 参数,而且效果很好。
我的问题是这样的:

假设列表(整数)的数字与我发布的数组中的数字顺序相同,是否安全?

谢谢你的时间!

编辑:

发布的数据如下所示:

POSTDATA=model.LevelIds=6&model.LevelIds=19&model.LevelIds=16&model.LevelIds=21&model.LevelIds=18

我正在使用 Tamper Data firefox 插件来查看它。

我在传统模式下使用 jQuery。

编辑:

动作看起来像这样:

thecreatviewmodel 有很多属性,但有趣的是...

在客户端,视图模型是使用 javascript/jquery 构建的:

该函数是从这段 javascript 调用的,它基本上通过并将列表中的所有内容添加到下拉列表(选择控件)并全部选择它们。

当它这样说时,这似乎相当复杂,但它实际上相当简单。它都是 2 个连接的拖放列表的一部分,它们是表单的一部分。

所以:如果我将选择列表的值及其所有选项放在一个变量中,并将其发布到 ilist(整数),ilist 将按照与选择中相同的顺序排列它们。好像他们是。但这只是巧合吗?

0 投票
1 回答
6257 浏览

asp.net - ASP.NET MVC 模型绑定器不使用字典

鉴于以下视图模型和使用 的操作DefaultModelBinder,它似乎忽略了字典,但正确绑定了所有其他属性。我在这里错过了什么吗?查看 MVC 源代码,这似乎是合法的。

谢谢

作为参考,HTML 输出为:

编辑:上面将不会像下面指出的那样工作,但是我更喜欢这种布局,下面的快速破解可以满足我的需要,在发布后调用它......

当然,它需要一些整理:)