我正面临一个让我吸烟的非常奇怪的问题。
我有一个相当简单的场景,我有一个从 GET 控制器正确填充的强类型视图,但是当它将表单发布到控制器时,Reqeust 充满了所有正确的值和正确的键名默认模型绑定器以正确填充我的模型对象之一,并且 DMB 创建正确的对象,但它从不填充任何属性,它们都处于默认状态。
这是以前工作的,我能想到的唯一变化是我尝试了一个自定义模型绑定器(然后删除了它;仔细检查以确保我没有仍在使用它),我重构了模型以拥有一个带有一些的基类的道具。
有什么想法吗?
我正面临一个让我吸烟的非常奇怪的问题。
我有一个相当简单的场景,我有一个从 GET 控制器正确填充的强类型视图,但是当它将表单发布到控制器时,Reqeust 充满了所有正确的值和正确的键名默认模型绑定器以正确填充我的模型对象之一,并且 DMB 创建正确的对象,但它从不填充任何属性,它们都处于默认状态。
这是以前工作的,我能想到的唯一变化是我尝试了一个自定义模型绑定器(然后删除了它;仔细检查以确保我没有仍在使用它),我重构了模型以拥有一个带有一些的基类的道具。
有什么想法吗?
一个非常相似的场景 - DefaultModelBinder - 本质上 - 没有绑定到您的模型,如果您将绑定的模型对象与其属性之一同名,则会出现:
模型
Public Property ArbitraryName1 As Integer
Public Property Answer As String
Public Property ArbitraryName2 As Boolean
看法
<p/> ... @Model.ArbitraryName1
<p/> Answer: @Html.TextBoxFor(Function(model) model.Answer)
<p/> ... @Html.CheckBoxFor(Function(model) model.ArbitraryName2)
控制器
<HttpPost()>
Function Index(answer As Model) As ActionResult
' answer is Nothing
End Function
(使用 ASP.NET MVC 3)
知道了。该模型已经以一种自然影响 mdoel binder 填充它的能力的方式进行了重构。
输入参数的名称不必等于对象的某些属性名称。请记住,所有数据都以 name -> value 数组的形式出现,并且默认绑定使用名称来使关系正常工作。
通过将两个属性从类的顶部移到更远的位置,我产生了这种行为。我仍然无法弄清楚为什么这会阻止第三个属性的绑定工作(因此这与其说是“提防”不如说是一个解决方案),但我多次重复更改并且每次绑定从工作到不工作。我还发现,在进行此更改后,我有时不得不“清理”解决方案以使绑定重新开始工作。