ASP .NET MVC Привязка модели представления «родитель-потомок» - PullRequest
0 голосов
/ 07 марта 2012

Я занимаюсь разработкой приложения MVC, и в моей модели есть следующие классы:

public class Member 
{
    [Required]
    public string Name {get;set;}
    public virtual ICollection AgeBrackets{ get;set;}
}

public class AgeBracket
{
    [Required]
    public int MinAge {get;set;}

    [Required]
    public int MaxAge {get;set;}

    public virtual Member Member {get;set;}
}

В представлении «Создать / изменить» для члена я хотел бы иметь вид представления «родитель-потомок»: общие поля редактирования (имя) для элемента и частичное представление для коллекции AgeBrackets, связанной с элементом. Я хочу иметь возможность добавлять / редактировать / удалять AgeBrackets с помощью формы диалога jQueryUI и обновлять список возрастных скобок на клиенте.

Вопрос - где хранить коллекцию скобок?

Я не хочу публиковать какие-либо изменения в коллекции скобок на сервере, пока не будет опубликована вся форма участника.

Я пытался сделать это с помощью knockout.js. Кажется, это самый элегантный способ сделать это. Можно ли использовать knockout.js только для сбора AgeBrackets и сохранять привязку Member к привязке модели MVC, а во время публикации Member каким-либо образом комбинировать поля Member и нокаутировать viewmodel коллекции AgeBracket?

1 Ответ

1 голос
/ 07 марта 2012

Работая с KO, я обнаружил, что намного проще работать с чистым json как в качестве входных, так и выходных данных ваших методов действий.

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

var memberViewModel = function() {
    this.name = ko.observable("Alex");
    this.ageBrackets = ko.observableArray([
        { minAge: 15, maxAge: 20 },
        { minAge: 18, maxAge: 21 },
    ]);
};

Тогда ваш метод действия может быть

public JsonResult Create(Member member) {
    ....
}

Когда вы нажимаете кнопку «Создать», вы запускаете функцию, которая преобразует вашу memberViewModel в JSON, который будет отправлен обратно и автоматически сопоставлен с вашей моделью Member.

Для преобразования в формат JSON вы можете использовать ko.toJSON(memberViewModel) или ko.mapping.toJSON(memberViewModel), если изначально использовали подключаемый модуль отображения.

Надеюсь, это поможет.

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