问题标签 [custom-model-binder]
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.
asp.net-mvc - 自定义模型绑定器 - 如何重新验证
我正在使用 ASP.NET MVC 2,并且想弄清楚在使用自定义活页夹填充模型后如何重新触发对模型的验证。
所以,我从几个相关联的 EF 类开始,Booking 和 Traveler(每个预订可以有一个或多个旅行者)
这是我用来在 Booking 上放置 balidation 的伙伴类:
我使用自定义模型绑定器来填充预订及其关联的旅行者,除了 ModelState.IsValid 似乎甚至在我的自定义模型绑定器有机会将旅行者添加到预订对象之前设置,即使这样做之后,ModelState ["Travellers"] 仍然包含验证错误,指出必须至少连接一名旅行者。
自定义模型绑定器完成后,有什么方法可以重新触发验证?
asp.net-mvc - 具有全局数字格式的 ASP.NET MVC 模型绑定器
当我的应用程序在对小数使用不同数字格式(例如 1.2 = 1,2)的国家/地区使用时,默认模型绑定器返回类型为 double 的属性的错误。网站的文化在我的 BaseController 中有条件地设置。
我已尝试添加自定义模型绑定器并覆盖 bindModel 函数,但我看不到如何解决其中的错误,因为 Culture 已被设置回默认的 en-GB。
所以我尝试向我的 BaseController 添加一个动作过滤器,在那里设置文化,但不幸的是 bindModel 似乎在我的动作过滤器之前被触发了。
我怎样才能解决这个问题?通过让 Culture 不重置自身或在 bindModel 启动之前将其设置回来?
模型无效的控制器:
过滤设置文化的地方:
自定义模型绑定器:
c# - 自定义模型提示器中的绑定错误会删除用户输入的值
我正在使用 ASP.NET MVC 3 RTM,并且我有一个这样的视图模型:
该TimeOfDay
属性是我拥有的一个自定义结构,非常简单,所以我不在这里包括它。我制作了一个自定义模型绑定器来绑定这个结构。模型绑定器非常简单:
我的自定义模型绑定器工作正常,但问题是无法转换或解析用户提供的值。发生这种情况时(当 TimeOfDay 构造函数抛出 时ArgumentException
),我添加了一个模型错误,该错误正确显示在视图中,但用户键入的无法转换的值丢失了。用户输入值的文本框是空的,并且在 HTML 源代码中 value 属性设置为空字符串:“”。
编辑:我想知道它是否可能是我的编辑器模板做错了,所以我把它包括在这里:
如何确保发生绑定错误时值不会丢失,以便用户可以更正该值?
c# - 类型可为空时未调用自定义模型绑定器
我有一个名为的自定义结构TimeOfDay
,它在这样的视图模型中使用:
我创建了一个自定义模型绑定器TimeOfDayModelBinder
,并在 Global.asax.cs 中注册它,如下所示:
一切都很好。但是,如果我将视图模型更改为:
我的自定义模型绑定器不再被调用。我知道该属性不再是 TimeOfDay 的类型,而是不同的 Nullable。那么这是否意味着我应该在 Global.asax.cs 中添加我的自定义模型绑定器两次,如下所示:
它有效,但我不喜欢它。这真的有必要将我的类型处理为可为空的,还是我缺少什么?
c# - 如何在 MVC 中制作自定义字符串对象模型绑定?
我创建了一个自定义字符串对象,但是当我将它发布回服务器时它没有模型绑定。是否有我在课堂上缺少的属性或其他东西?
这是下面的自定义字符串类:
asp.net-mvc - MVC3 上的 Html.EditorFor 问题
我有一个视图,其表单输入到名为 AddEditItemVM 的视图模型中。此视图模型具有以下属性:
我正在尝试的是两件事:
在我的视图模型的通用类别列表中为每个类别呈现一个复选框。
使表单发布时接收,在我的控制器操作中,属性Categories实例化(到 AddEditItemVM 的实例中)
关于第一点,我想使用任何帮助器(如果存在)使用 lambda 表达式(如 (m=>m.Categories))呈现一组复选框,而不是将带有 foreach 的复选框呈现到视图中。
关于第二点,我读到 MVC 中有一个名为Custom Model Binders的特性。这些从 ValueProviders 获取值(查询字符串、cookie 或表单值)并创建必要的实例,将其传递给表单发布后调用的特定操作。我应该创建一个自定义模型绑定器以接收我的属性类别实例化吗?
asp.net-mvc - 双值绑定问题
在我的项目中,我希望允许用户以 2 种格式输入双精度值:使用“,”或“。” 作为分隔符(我对指数形式不感兴趣)。默认值带有分隔符 '.' 不工作。我希望这种行为适用于复杂模型对象中的所有双重属性(目前我使用包含标识符和值的对象集合)。
我应该使用什么:价值提供者或模型绑定器?请显示解决我的问题的代码示例。
c# - A 从已经工作的一个创建了一个新的 CustomModelBinder。为什么新的从来没有被要求做任何绑定?
我可以做这样的事情吗?
我的 global.asax.cs application_start 中有以下内容
更新
所以,我试着看看出了什么问题。这是我的新代码。看来问题出在这个 WizardViewModel 和它的活页夹上。什么“告诉”应用程序期望和传入的向导模型?
我的 global.asax.cs application_start 中有以下内容
完整的活页夹代码
c# - 使用自定义模型绑定器时出现 NullReferenceException
我正在尝试为抽象类制作活页夹。绑定器决定使用哪个类的实现。
所以我有一个带宠物的控制器,绑定器决定(取决于物种字符串)它是狗、猫还是牲畜。
这很好用,但只要宠物在另一个结构(如List<Pet>
或另一个对象)中,我就会得到一个 NullReferenceException(在var name = (string)values.GetValue("name").ConvertTo(typeof(string));
PetBinder 的行上)。我究竟做错了什么?
我添加了一个 Person 类来测试。它还给了我一个 NullReferenceException。
ccurrens 说var name = (string)values.GetValue("name").ConvertTo(typeof(string));
返回 null 的原因是它无法从列表中获取值。
我看到它们被命名[n].name
并且[n].species
在 a 中List<Pet>
,但是在Person
对象中它们被命名pet.name
并且pet.species
当它们在单个 中时Pet
,它们只是被命名为name
and species
。
解决方案
为了获得具有正确前缀([n]
或pet
其他任何东西)的参数名称GetValue
,我使用了以下代码:
如果有人有兴趣,我最终继承了DefaultModelBinder
使用类似于这个答案的东西。这是我使用的完整代码:
asp.net-mvc-3 - 测试是否正在使用 WebActivator 激活一个类,以及是否将 IModelBinder 添加到 ModelBinderProviders.BinderProviders。
来自 Stack Exchange 的各位朋友。
我正在尝试测试我的自定义模型绑定器是否已添加到 ModelBinderProviders.BinderProviders 集合中。我决定通过 WebActivator 激活它,以避免弄乱 global.asax,一切正常,但测试:
我尝试使用 WebActivator.ActivationManager.Run() 方法,但我的东西没有加载。我的测试中有这样的东西:
这是我的 app_Start 课程: