代码之家  ›  专栏  ›  技术社区  ›  Paul

ASP.NET MVC DefaultModelBinder未在Post上绑定属性

  •  3
  • Paul  · 技术社区  · 15 年前

    我正面临一个让我吸烟的非常奇怪的问题。

    我有一个相当简单的场景,其中我有一个强类型的视图,该视图是从get上的控制器正确填充的,但是当它将表单发布到控制器时,request中充满了默认模型绑定器的所有正确值和正确键名,以便正确填充我的模型对象之一,DMB创建了正确的opject,但它从不填充任何属性,它们都处于默认状态。

    这在以前是有效的,我能想到的唯一变化是我尝试了一个自定义的ModelBinder(然后删除了它;再次检查以确保我没有继续使用它),并且我重构了模型以得到一个带有一些属性的基类。

    有什么想法吗?

    4 回复  |  直到 9 年前
        1
  •  3
  •   Sami Lamti    12 年前

    一个非常类似的场景——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)

        2
  •  0
  •   Paul    15 年前

    知道了。模型以一种自然影响MDOEL绑定器填充它的能力的方式进行了重构。

        3
  •  0
  •   user2539146    11 年前

    输入参数的名称不必等于对象的某个属性名。请记住,所有作为name->值数组和默认绑定来的数据都使用名称使关系正常工作。

        4
  •  0
  •   christutty    9 年前

    我通过将两个属性从类的顶部移到下面来产生这种行为。我仍然不明白为什么这会阻止第三个属性的绑定工作(所以这不是一个解决方案,就像“小心”),但我重复了多次更改,每次绑定从工作变为不工作。 我还发现,在做了这个更改之后,有时我必须“清理”绑定的解决方案,以便重新开始工作。