Страница MVC-Post частично — сбой привязки модели

Я пытаюсь опубликовать часть страницы и привязать ее к модели просмотра на контроллере. Мой шаблон редактора для SearchVM :

@Html.TextBoxFor(model => model.TestText, new { @class = "form-control ",
                 @placeholder = "TEXT" , @id="test" })
<input type="submit" value="Submit" />

Индекс.cshtml:

@using (Html.BeginForm("Search", "Pencil", FormMethod.Post, 
                       new { enctype = "multipart/form-data" }))
{
   @Html.EditorFor(model => model.SearchVM);
}

Контроллер:

  public ActionResult Search(SearchVM vm)
  {
     // ...
  }

Когда я набираю что-то в текстовом поле testText и нажимаю «Отправить», я получаю действие «Поиск», но vm.TestText пусто, я не могу привязать поле формы из шаблона редактора к модели представления. Любая идея?


person user2026343    schedule 10.07.2015    source источник
comment
открытый класс SearchVM { общедоступная строка TestText { получить; набор; } } Теперь я пытаюсь использовать Ajax.BeginForm вместо HTML,BeginForm, но результат тот же.   -  person user2026343    schedule 10.07.2015
comment
Я думаю, это потому, что вы переопределяете идентификатор текстового поля. Когда вы публикуете форму, идентификаторы входных данных должны соответствовать именам свойств модели, чтобы работало средство привязки модели по умолчанию. Попробуйте удалить это: @id=test   -  person Alexandr Sugak    schedule 10.07.2015
comment
пробовал, тот же результат   -  person user2026343    schedule 10.07.2015
comment
хорошо, тогда проверьте вкладку сети в браузере при отправке почтового запроса - как выглядит тело запроса?   -  person Alexandr Sugak    schedule 10.07.2015
comment
спасибо за подсказку, помог найти проблему   -  person user2026343    schedule 10.07.2015


Ответы (1)


Это происходит потому, что класс, переданный вашему представлению как @model, обертывает класс SearchVM, и когда вы вызываете @Html.EditorFor(model => model.SearchVM), он отображает ввод с префиксом SearchVM:

<input id="SearchVM_TestText" name="SearchVM.TestText" value="" ... />

В свою очередь, при отправке обратно в контроллер ModelBinder не сможет десериализовать это в SearchVM

Что вы можете сделать, так это использовать эту перегрузку EditorFor:

@Html.EditorFor(model => model.SearchVM, "_SearchVM", "");

Где _SearchVM — это имя вашего шаблона редактора. Передача "" в качестве параметра htmlFieldName удалит нежелательный префикс SearchVM на входе.

person StuartLC    schedule 10.07.2015
comment
@user2026343 user2026343 Если этот ответ решил вашу проблему, сделайте одолжение Stack Overflow и отметьте его как принятое :) - person Inspector Squirrel; 10.07.2015