Как создать, а не редактировать объект со списком объектов в C # MVC 4, используя привязку модели?

#c# #asp.net-mvc #asp.net-mvc-4 #model-binding

#c# #asp.net-mvc #asp.net-mvc-4 #привязка к модели

Вопрос:

Скажем, у меня был веб-сайт, на котором пользователи создают (и редактируют) игровые приставки. Он имеет следующую модель.

 VideoGameConsole:
  String name
  DateTime released
  List<VideoGames> games

VideoGame:
  String name
  DateTime released
  HttpPostedFileBase image
 

(Я надеюсь, что этот пример достаточно прост.)

Мне интересно, как создать такой объект, используя привязку модели (не редактировать, я видел много решений для рендеринга или редактирования уже существующего динамического списка). Текущий способ, по-видимому, заключается в том, что привязка модели позволяет вам создавать только видеоигру без игр, затем вернуться на экран редактирования и добавить игры. Я ищу решение, при котором пользователь может видеть весь объект перед созданием. По крайней мере, есть ли название для того, что я пытаюсь сделать, которое облегчило бы продолжение моих собственных исследований по этому вопросу?

Спасибо.

Редактировать 1:

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

Во-первых, я изменил модель, включив в нее a HttpPostedFileBase для каждого VideoGame , который представляет изображение. Итак, нам нужно иметь возможность загружать несколько файлов. Само по себе это не делает его намного интереснее.

Во-вторых, это должно работать без javascript (для части базы пользователей наших приложений javascript отключен… причины… и мы не можем просто не поддерживать их). Вот тут-то и начинается настоящее веселье.

Что касается отказа от использования javascript, мое частичное решение этой проблемы заключается в следующем.

Когда они нажимают, чтобы добавить новую игру, отправьте страницу обратно, не сохраняйте ее, а затем верните модель просмотра с этой страницей, предлагающей возможность редактировать список уже добавленных игр или добавлять новую. Это почти без состояния, за исключением того, что в каждом сообщении мы добавляем файл изображения в сеанс (в противном случае им придется заново добавлять каждый файл каждый раз, когда они решат добавить новую игру, прежде чем нажимать сохранить). Затем мы добавляем javascript сверху, чтобы сделать так, чтобы промежуточные обратные отправки не требовались, если у вас включен javascript.

Комментарии:

1. Будет ли подход, основанный на ajax или «обычном» javascript, использовать что-то вроде Knockout.js работать на вас?

2. @Joe Мы не можем, потому что мы не можем зависеть от Javascript. Его можно использовать только для улучшения базового интерфейса.

Ответ №1:

У вас есть примеры для редактирования существующей модели, как вы говорите, поэтому используйте это в качестве руководства и в своем действии create создайте и отправьте ненулевую модель в ваше представление, скажем, с 10, 20, 100 (любое подходящее число) ваших дочерних элементов, предварительно заполненных, и простозапретите пользователю добавлять новые дочерние элементы сверх того, что вы указали в представлении создания.

При обратной передаче вы можете проверить правильность дочерних элементов, чтобы отбросить те, которые вы не хотите сохранять — те, которые не были изменены пользователем.