2010-09-19 1 views
4

Я чувствую, что мой вопрос близок к этому, но мне нужно более общее обсуждение того, где должен сидеть такой код. Asp.Net MVC SelectList Refactoring Question?Где выбрать логику selectlist в ASP.NET MVC, представлении, модели или контроллере?

В настоящее время я создаю свои selectlists непосредственно на моей модели сущности, например.

public SelectList taskDeadlineTime 
    { 
     get { return new SelectList(TimeDictionary, "Value", "Key", this.getDeadlineTime()); } 
    } 

Это кажется немного неправильным, как если бы я выполнял просмотр, внутри моей модели.

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

Теперь я должен поместить эту логику в свой контроллер (больше кода для записи) или просмотреть (чувствует себя не так, и беспорядочно), или просто делать это по-другому.

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

ответ

7

Обычно я помещаю это в вид.

ViewModel:

public IEnumerable<Foo> TaskDeadlineTimes { get; set; } 

Вид:

<%= Html.DropDownListFor(
    x => x.SelectedValue, 
    new SelectList(Model.TaskDeadlineTimes, "Value", "Key") 
) %> 

И контроллер заботится о настройке этого значения свойства, используя репозиторий.

+0

Это имеет смысл во многих отношениях, поскольку вы также можете установить выбранные значения в качестве 4-го параметра в представлении. Но не будет ли это быстрее, если вы просто предоставите избранный список для представления, чтобы избавиться от неиспользуемых накладных расходов? – bnu

0

У нас есть дополнительный слой, который мы называем Строителями.

Контроллер создает строитель и передает необходимую ему информацию.

Builder взаимодействует с контекстом (текущий пользователь, его роль и т. Д.) + Слой данных и генерирует модель со всеми достоверными данными.

Чем контроллер передаст эту модель для просмотра.

+0

Я делаю что-то подобное, за исключением того, что у меня есть строители на уровне фильтра действий вместо уровня обслуживания/контроллера. Контроллер может возвратить модель представления с атрибутами и нулевыми значениями, и правильные сборщики активируются, чтобы заполнить недостающие данные. – Ryan

 Смежные вопросы

  • Нет связанных вопросов^_^