ASP.net MVC: Создание SelectList в представлении или действии?

Я просто задаюсь вопросом, где люди создают свой SelectList - в действии или представлении.

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

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

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

Аплодисменты Anthony

5
задан Francisco Aquino 8 February 2010 в 04:14
поделиться

5 ответов

Я использовал метод расширения, который проверяет две последовательности для равных предметов

public static bool CheckForEquality<T>(this IEnumerable<T> source, IEnumerable<T> destination)
{
    if (source.Count() != destination.Count())
    {
        return false;
    }

    var dictionary = new Dictionary<T, int>();

    foreach (var value in source)
    {
        if (!dictionary.ContainsKey(value))
        {
            dictionary[value] = 1;
        }
        else
        {
            dictionary[value]++;
        }
    }

    foreach (var member in destination)
    {
        if (!dictionary.ContainsKey(member))
        {
            return false;
        }

        dictionary[member]--;
    }

    foreach (var kvp in dictionary)
    {
        if (kvp.Value != 0)
        {
            return false;
        }
    }

    return true;
}
-121 -1717492-

Главный вопрос: какова цель поля dateime/timestamp? Если это всего лишь временная метка, как в файле журнала, где сохраняется только фактическое время, то временная метка является лучшим выбором. Потому что ему нужно всего 4 байта, и мы находимся в области, которую может покрыть метка времени. Если это дата, как дата рождения, дата и время являются хорошим выбором. Мы надеемся, что у нас будет решение до окончания срока действия временной метки.;) (Извините за мой английский).

-121--4407417-

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

5
ответ дан 14 December 2019 в 01:07
поделиться

Это аспект, связанный с презентацией, поэтому я предпочитаю делать это в представлении, используя помощник 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;
}

С уважением.

2
ответ дан 14 December 2019 в 01:07
поделиться

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

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

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

1
ответ дан 14 December 2019 в 01:07
поделиться

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

1
ответ дан 14 December 2019 в 01:07
поделиться

Ни то, ни другое, создайте его в отдельном классе, смотрите здесь Как отобразить модель представления обратно в модель домена в действии POST?

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

0
ответ дан 14 December 2019 в 01:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: