Это мой первый ТАК вопрос, и это скорее не «как мне это сделать», а скорее «какой самый чистый способ сделать это», потому что я вижу несколько подходов, но ни один из них не кажется оченьобращаясь ко мне.
Это немного сложная проблема для описания.По сути, у меня есть представление Add / Edit, которое позволяет пользователю редактировать поля какого-либо объекта.Этот объект довольно сложный: у него есть несколько полей и подсписок сложных объектов.Каждый сложный объект имеет около 40 полей (в основном это флажки, переключатели и даты / время).Я представлял это как список выбора:
http://fortheloot.com/public/pictures/sub-items.png
Кнопка Добавить порождает диалог с различными полями.
Вопрос приходит сюда.Когда пользователь принимает диалоговое окно, и диалоговое окно закрывается, мне теперь нужно где-то сохранить эти данные, чтобы пользователь мог редактировать их дальше или добавлять другие подпункты до фактической отправки формы.
Наиболее очевидноеспособ сделать это - создать набор скрытых полей для каждого подобъекта.Таким образом, добавление подпункта приведет к добавлению 40 скрытых элементов к элементу <form>
.Добавьте 10 подпунктов, и у вас будет 400 скрытых полей.Это будет нормально работать и будет привязываться к этой модели, если поля будут иметь правильные имена:
public class AddEditModel
{
[Display(Name = "ID")]
public int? Id { get; set; }
[Display(Name = "Name")]
[Required]
[StringLength(100)]
public string Name { get; set; }
public IList<EntryModel> Entries { get; set; }
public class EntryModel { /* fields */ }
}
На стороне привязки модели это выглядит довольно хорошо, но со стороны клиента яМне нужно отслеживать сотни элементов DOM, и это кажется мне громоздким.Загрузка и выгрузка различных элементов формы диалога из 40 других элементов кажется ... как будто это могло бы быть лучше.
В идеале, я хотел бы иметь возможность просто хранить данные в виде объекта javascript на <option>
элемент, использующий либо data-
атрибуты HTML 5, либо функцию data()
jQuery, которые на самом деле одинаковы.Это сделало бы аспекты JavaScript более понятными, но это не привело бы к автоматической привязке к модели при обратной передаче.
Если бы был способ получить лучшее из обоих миров - сохранить один объект JS наэлемент <option>
или даже один элемент <input type="hidden" />
(для каждого подпункта) - который все еще будет правильно привязан к модели при обратной передаче, я бы чувствовал, что эта проблема решена.