Проблема гидратации модели с моделью в MVC 3 на обратной передаче - PullRequest
0 голосов
/ 03 февраля 2012

У меня есть 2 класса моделей, подобных:

class DependenciesModel{
    List<int> DependencyComponentIDs { get; set; }
}

class ComponentModel{
    int ComponentID { get; set; }
    string Name { get; set; }
    DependenciesModel Dependencies { get; set; }
}

Вид использует выглядит примерно так:

@model ComponentModel

@Html.HiddenFor(m => m.ComponentID)
<table>
    <tr>
        <td>@Html.LabelFor(m => m.Name)</td>
        <td>@Html.TextBoxFor(m => m.Name)</td>
        <td>@Html.ValidationMessageFor(m => m.Name)</td>
    </tr>
    <tr>
        <td>Dependencies</td>
        <td>@Html.EditorFor(m => m.Dependencies, "DependencyEdit")</td>
        <td>&nbsp;</td>
    </tr>
</table>

И шаблон редактора DependencyEdit.cshtml в папке EditorTemplates:

@model DependenciesModel

// There is more to this but I'm simplifying to get to the point
@Html.CheckBoxListFor(model => model.DependencyComponentIDs)

Я вижу, что значения отправляются обратно в Fiddler, но в контроллере свойство Dependencies пусто.

Интересная часть заключается в том, что значения публикуемых полей просто DependencyComponentIDs без указания того, что они являются частью Dependencies свойства

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

Что мне нужно сделать, чтобы это работало?

Ответы [ 2 ]

1 голос
/ 03 февраля 2012

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

В вашем DependencyEdit.cshtml попробуйте что-то вроде этого

@ model DependenciesModel

@for (int i = 0; i < Model.DependencyComponentIDs.Count; i++) {
     @Html.CheckBox(String.Format("Dependencies.DependencyComponentIDs[{0}]", i), false, new{ value = Model.Dependencies.DependencyComponentIDs[i] })
}

Это не очень хорошее решение, но для меня это помогло. Вы также можете проверить: Как создать метод расширения CheckBoxListFor в ASP.NET MVC? .

1 голос
/ 03 февраля 2012

Я смутно помню, что у меня была похожая проблема.не могли бы вы попытаться указать явное значение Id для элемента управления зависимостей с помощью xy или x_y, где x - это класс оболочки, а y - это свойство?Если нет, то я проверю, как я это сделал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...