2009-06-05 63 views
3

我正面临一个非常奇怪的问题,让我抽烟。ASP.Net MVC DefaultModelBinder在POST上不绑定属性

我有一个相当简单的场景,我有一个强类型的视图,从GET上的控制器正确填充,但是当它将表单提交给控制器时,Reqeust充满了所有正确的值,默认模型联编程序的键名正确填充我的模型对象之一,并且DMB创建正确的对象,但它从不填充任何属性,它们都处于默认状态。

这是工作之前,我能想到的唯一的变化是我尝试了一个自定义模型绑定器(然后删除它;双重检查,以确保我还没有使用它),我重构了模型有一个基础类与一些道具。

有什么想法?

+2

发表一些代码。 – tvanfosson 2009-06-05 02:57:37

+0

如果它在以前工作,你可以尝试回滚到那一点,然后开始再次进行一次更改,并找出破坏它的因素...... – Alconja 2009-06-05 06:15:06

+0

发布代码=)我们不介意读者。 – zihotki 2009-06-05 10:15:14

回答

0

明白了。模型被重构的方式自然影响了mdoel粘合剂的填充能力。

+1

你是如何重构它的?你是如何做到的?我无法分辨我的问题是否与您的问题类似。 – Tilendor 2010-03-03 21:59:34

+0

对于神秘感到抱歉。基本上,我一直将Person对象推送到GET操作的视图中,然后从POST操作的表单中获取Person对象。我改变了GET动作来填充表单,其中包含更多信息的视图模型,视图模型有一个Person作为其属性之一,这改变了表单字段中名称的生成方式。更改POST以使用更类似的结构解决了问题。 – Paul 2010-07-24 12:32:21

+0

我有类似的问题 - 你是什么意思'改变帖子'? – codeulike 2010-09-23 18:26:04

3

一个非常类似的情况 - 即DefaultModelBinder是 - 本质 - 不绑定到你的模型,arrise如果你想给你的绑定模型对象相同的名称作为它的一个属性:

型号

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)

0

您输入参数的名称不必等于对象的某些属性名称。请记住,所有以name - > value数组形式出现的数据和默认绑定使用名称来使关系起作用。

0

我有这种行为是通过从类的顶部移动两个属性进一步下降。我仍然无法弄清楚为什么这会阻止绑定第三个属性的工作(所以这不是一个解决方案,而是一个'小心'),但我多次重复更改,每次绑定都从努力工作。 我也发现在做这个改变之后,我有时必须'清理'绑定的解决方案才能重新开始工作。