Работа с двумя моделями в одном виде с mvc 3 - PullRequest
2 голосов
/ 14 июня 2011

Давайте представим, что у нас есть две модели:

Teams: Id, Name
Player: Id, Name, TeamId

Я хочу сохранить команду и коллекцию игроков этой команды в одном представлении.Поэтому, на мой взгляд, должны быть следующие элементы:

  • ввод для имени команды
  • ввод для имени игрока
  • кнопка добавления, чтобы добавить имя игрока из ввода в коллекцию
  • список добавленных игроков
  • кнопка сохранения, чтобы сохранить команду и коллекцию игроков.

В этой ситуации мы должны работать с двумя моделями в одном представлении.Особенно я хочу посмотреть, каким должен быть сценарий добавления кнопки.

Может кто-нибудь помочь с этим?

1 Ответ

4 голосов
/ 14 июня 2011

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

 public class MeamWithPlayersViewModel
 {
      public long ID { get; set; }  // this ought to match the id parameter on the post
      public string Name { get; set; }
      public TeamPlayer[] Players { get; set; }
 }

 public class TeamPlayer
 {
      public long PlayerID { get; set; }
      public string Name { get; set; }
 }

На ваш взгляд - если вы добавите игроков для определенной команды -

 @using (Html.BeginForm())
 {
       <p>Current Players</p>
       @for (int i = 0; i < Model.Players.Length; ++i)
       {
             <p>Model.Players[i].Name
             @Html.HiddenFor( model => model.Players[i].PlayerID )
             </p>
       }
       <button class="add-player">Add Player</button>
       <button class="save-button">Save</button>
 }

Затем, используя некоторый JavaScript с AJAX, вы реализуетеВозможность добавить нового игрока из списка, полученного через AJAX.В обратном вызове из кода добавления игрока (привязанного к кнопке) вы добавите имя и другое скрытое поле с идентификатором игрока <input type="hidden" name="Players[n].PlayerID" value="_some_id_" />, где n - следующий номер в последовательности.Вы можете опустить n в зависимости от ваших точных функций.

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