ASP.net MVC: создание списка выбора в представлении или действии? - PullRequest
5 голосов
/ 08 февраля 2010

Мне просто интересно, где люди создают свой список выбора - в действии или в представлении.

Я видел примеры того и другого, и тот, который имеет для меня наибольшее значение, делает это в действии, и у модели представления есть свойство типа SelectList.

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

Короче говоря, мне просто было интересно, что люди делают в банкоматах.

Ура Энтони

Ответы [ 5 ]

5 голосов
/ 08 февраля 2010

Создайте свой список SelectList в контроллере (просмотрев список элементов из репозитория модели) и передайте его представлению как объект ViewData или как часть строго типизированной ViewModel.

2 голосов
/ 08 февраля 2010

Это специфичный для презентации аспект, поэтому я предпочитаю делать это в представлении, используя Html-помощник. Поэтому я передаю коллекцию в представление и использую вспомогательный метод html для сопоставления элементов с SelectListItems. Метод может выглядеть так:

public static IList<SelectListItem> MapToSelectItems<T>(this IEnumerable<T> itemsToMap, Func<T, string> textProperty, Func<T, string> valueProperty, Predicate<T> isSelected)
{
    var result = new List<SelectListItem>();

    foreach (var item in itemsToMap)
    {
        result.Add(new SelectListItem
        {
            Value = valueProperty(item),
            Text = textProperty(item),
            Selected = isSelected(item)
        });
    }
    return result;
}

Привет.

1 голос
/ 08 февраля 2010

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

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

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

1 голос
/ 08 февраля 2010

Я обычно создаю свой SelectList в слое действия или сервиса и передаю его моему представлению через ViewData. Я также сделал это частью модели представления и строго типизированного представления. Однако оба способа создают его на уровне действия или службы.

0 голосов
/ 05 мая 2010

Также, создайте его в отдельном классе, смотрите здесь Как отобразить View Model обратно в Domain Model в действии POST?

Я использую интерфейс IBuilder в контроллере и делаю все построение сущностей / моделей представления в реализации этого Builder

...