ASP.Net MVC DefaultModelBinder не привязывает свойства на POST - PullRequest
3 голосов
/ 05 июня 2009

У меня действительно странная проблема, из-за которой я курил.

У меня довольно простой сценарий, где у меня строго типизированное представление, которое корректно заполняется из контроллера в GET, но затем, когда он помещает форму в контроллер, запрос всегда полон всех правильных значений и правильного ключа. имена для подшивки модели по умолчанию для правильного заполнения одного из моих объектов модели, и DMB создает правильный объект, но он никогда не заполняет ни одно из свойств, все они находятся в состоянии по умолчанию.

Раньше это работало, единственные изменения, о которых я мог подумать, это то, что я попробовал пользовательское связующее для моделей (затем удалил его; дважды проверил, чтобы убедиться, что я все еще не использую это), и я рефакторинг модели, чтобы иметь базу класс с некоторыми из реквизита.

Есть мысли?

Ответы [ 4 ]

3 голосов
/ 14 декабря 2012

Очень похожий сценарий - то, что DefaultModelBinder - по сути - не привязывается к вашей модели, возникает, если вы дадите объекту связанной модели то же имя, что и у одного из его свойств:

Модель

Public Property ArbitraryName1 As Integer
Public Property Answer As String
Public Property ArbitraryName2 As Boolean

View

<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 голосов
/ 08 сентября 2015

Такое поведение возникало при перемещении двух свойств из верхней части класса вглубь. Я до сих пор не могу понять, почему это остановило привязку третьего свойства к работе (так что это не решение проблемы, а «следите за»), но я повторял изменение несколько раз и каждый раз, когда привязка выходила работает, чтобы не работает. Я также обнаружил, что после внесения этого изменения мне иногда приходилось «очищать» решение, чтобы привязка снова начала работать.

0 голосов
/ 16 августа 2013

Имя вашего входного параметра не обязательно должно быть равно некоторому имени свойства объекта. Помните, что все данные, поступающие в виде массива name -> value и привязки по умолчанию, используют имена для обеспечения работы отношения.

0 голосов
/ 07 июня 2009

Понял. Модель была подвергнута рефакторингу таким образом, что естественным образом повлияло на способность связующего mdoel заполнить ее.

...