Создание контрольного списка из объединенных таблиц в MVC3 - PullRequest
0 голосов
/ 29 марта 2012

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

У нас есть экран ввода данных в формате HTML с 3 разделами: большой список прокрутки слева, блок подробностей вцентр и еще один список прокрутки справа.Левый список - это список кодов групп и имен, взятых из таблицы групп.Это нарисовано частичным представлением под названием _Groups.Центральная область отображает подробные поля для выбранной в данный момент группы.Правый список - это прокручиваемый список имен людей.Центр и правое изображение нарисованы в частичном представлении, называемом _GroupDetails.

Правый список - это то, что сейчас доставляет нам проблемы.У нас есть таблица групп, таблица лиц и таблица пересечений, в которой хранятся идентификатор группы и идентификатор человека.Если человек принадлежит к группе, то для этой пары человек-группа существует запись о пересечении.Если нет, то нет.Мы хотим взять текущий выбранный идентификатор группы и использовать его для запроса, который извлекает все записи из таблицы Persons и добавляет логическое поле.Логическое поле должно быть T, если человек принадлежит выбранной в данный момент группе, и F в противном случае.Затем мы хотим отобразить это как контрольный список с логическим полем в качестве поля флажка и именем рядом с ним.

Каков наилучший способ сделать это?

- Джон


Дополнительная информация, которая, я надеюсь, будет полезна: наша модель данных для этого представления включает в себяэто определение списка:

  public List<GlobalName> UserList { get; set; }

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

1 Ответ

0 голосов
/ 03 апреля 2012

MVC не имеет встроенного вспомогательного метода CheckBoxList, как для SelectList.Тем не менее, существует множество отличных расширений, поэтому вам не нужно изобретать велосипед.Вы можете проверить здесь , здесь или здесь для некоторых примеров.

Используя расширение MvcCheckBoxList, например, вы можете сделать это:

// You'll need a view model
class GroupPersonsCheckListViewModel
{
    public IEnumerable<Person> Persons{ get; set; }
    public Group Group { get; set; }
}

// In your controller action:
var group = context.Group.Find(id); // assumes 'id' was passed to the action
var allPersons = context.Persons.OrderBy(person => person.Name);
var groupPersons = new GroupPersonsCheckListViewModel() { Persons = allPersons, Group = group };
return PartialView(groupPersons);

// In your partial
@Html.CheckBoxListFor("GroupPersons", 
    m => m.Persons,      // Collection of all persons
    p => p.PersonId,     // Person ID attribute
    p => p.Name,         // Person Name attribute
    m => m.Group.Persons // Collection of persons that are currently associated with the group
);
...