Способ, которым Мэтт Пеннер рендерит дерево, проще и чище ... но поскольку он не построил "модели", представляющие данные дерева, его метод нелегко использовать для считывания дерева. Дерево должно быть считано обратно в «модель», и, поскольку оно является деревом, такая модель должна быть рекурсивной, как показано в первом примере.
Однако, если вы дадите соответствующие имена флажкам, вы можете прочитать их обратно. На самом деле привязка модели к записи выполняется с использованием соглашения об именах, например, флажок с именем:
Дети [2] .children [0] .MyCheckBox
Будет прочитано обратно в:
третий ребенок первый уровень => первый ребенок второй уровень
модель иерархической модели, которую вы должны построить, чтобы получить опубликованные данные.
Однако этот подход хорошо работает, если пользователь не изменяет структуру дерева, потому что в таком случае флажок с именем Children [2] .Children [0] .MyCheckBox может оказаться в другом месте, чем его имя предполагает, что это будет не более 3-го дочернего уровня, и может стать, например, 5-м дочерним первым уровнем ... но его имя не меняется.
С другой стороны, если вы сериализуете данные на клиенте, а затем отправляете их в json на сервер, вы сможете учесть и модификации дерева.
При этом взгляните на TreeView набора инструментов управления Mvc (я координатор проекта) ... он уже выполнил всю работу за вас, и вы можете использовать универсальный шаблон для каждый узел, то есть вы можете поставить все, что вам нравится в каждом узле: