2014-09-08 2 views
0

У меня есть модель представления, которая содержит две моделей, одна является IList:ViewModel проводки назад нуль

public class PersonViewModel 
{ 
    public Person person { get; set; } 
    public IList<Snack> { get; set; } 
} 

Это выводит все данные мне нужно для моего основного вида и частичного вида просто отлично. Проблема, с которой я столкнулась, - это когда я ударил свое действие, связанное с кнопкой отправки.

@using (Html.BeginForm("ProcessSnacks", "Person", FormMethod.Post)) 
{ 
    <input id="process" type="submit" value="Process Snacks" /> 
} 

На мой контроллер у меня есть:

public ActionResult ProcessSnacks(PersonViewModel vm) 
{  
    //ViewModel is NULL here... 
} 

Я на самом деле просто нужны данные из модели Person внутри PersonViewModel и попробовал много перестановок ... Я пытался просто с человеком, как вместо модели просмотра, но не повезло. Я тоже был в StackOverflow и не могу найти другую проблему, которая вполне соответствует.

+0

У вас есть какие-либо «помощники» на ваш взгляд? Это то, что свяжет данные с вашей модели с представлением и заставит его отправить назад. –

+0

есть что-нибудь в вашей форме, кроме кнопки отправки ...? – Jonesopolis

+0

Почему вы отправляете «PersonViewModel», если все, что вам нужно, это «Лицо»? – 48klocs

ответ

4

Вы просто привязали viewmodel к виду на стороне сервера, но само представление не использует данные каким-либо образом, поэтому, когда вы отправляете его, клиентская сторона не может знать, что вы хотите, чтобы некоторые данные, отправленные обратно на сервер. Если вы хотите такого поведения, вам нужно иметь некоторые поля внутри вашей формы, которые позволят отправить данные обратно на сервер.

Вы должны понимать, что сообщение в MVC не является чем-то чудом, большая часть работы выполняется для вас (привязка, например), но вы должны предоставить минимальный минимум для ее работы. Если вы не хотите иметь форму с текстовыми полями, вы можете использовать, например, @Html.HiddenFor(...) помощник для всех полей, которые необходимо отправить на сервер.

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

+0

Удивительный! Большое спасибо :-) Прошло много времени с тех пор, как я работал с mvc ... – Hidan

0

Поместите некоторые текстовые или выпадающие списки или hiddentextboxes в представление с вашей моделью в качестве значений, вы должны увидеть их на столбе назад.

Поскольку это означает, что ваш взгляд не содержит никаких значений модели, поэтому при обратной передаче он будет пустым.

Смежные вопросы