Передача сложного объекта из представления в контроллер: один объект всегда равен нулю - PullRequest
5 голосов
/ 07 ноября 2010

Я передаю сложный объект как Model на View как

alt text

но когда я возвращаю модель из представления, один конкретный объект всегда появляется null, в то время как другие сложные типы обычно проходят через

alt text

мой вид является стандартным Edit строго типизированный вид

alt text

Чего мне не хватает ?

ModelState Ошибка говорит

Преобразование параметра из типа 'System.String' в тип 'Julekalender.Database.CalendarInfo' завершилось неудачно, поскольку преобразователь типов не может преобразовать эти типы.

Почему бы я не получил то же самое для других типов? Как автоматически конвертируется?


Я добавил 3 поля (так как шаблон T4 не добавляет эти типы), но я все равно получаю нулевое значение, когда POST ing

Зеленое поле ниже - поле

<div class="editor-field">
    <%: Html.TextBoxFor(model => model.Calendar.Guid)%>
</div>

alt text


Даже переименовывая Действие в

[HttpPost]
public ActionResult General2(GeneralInfo model)

выдает ту же ошибку

alt text

1 Ответ

2 голосов
/ 07 ноября 2010

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

В полученном HTML вы должны иметь:

<input type="text" name="Calendar.Prop1" value="prop1 value" />
<input type="text" name="Calendar.Prop2" value="prop2 value" />
... and so on for each property you expect to get back in the post action
... of course those could be hidden fields if you don't want them to be editable

ОБНОВЛЕНИЕ:

Проблема заключается в том, что у вас есть строковая переменная с именем calendar в вашем методе действия и объект, который имеет свойство с именем Calendar, что сбивает с толку.Попробуйте переименовать его:

[HttpPost]
public ActionResult General2(string calendarModel, GeneralInfo model)

Также не забудьте переименовать его в своем представлении.

...