0

Я занимаюсь разработкой приложения MVC и я следующие классы в моей модели:ASP .NET 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;} 
} 

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

Вопрос в том, где я должен хранить коллекцию скобок?

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

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

+0

Возможно ли иметь что-то вроде public ActionResult Create (член-член, IEnumerable ageBrackets) в контроллере члена? где IEnumerable ageBrackets будет knockout.js viewModel и член-член - регулярная привязка модели MVC – Alex

ответ

1

При работе с 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, который будет опубликован назад и автоматически сопоставляется с моделью участника.

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

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

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