2010-11-29 2 views
1

Это произошло во время одной из наших ретроспектив и потребовало дополнительной обратной связи и проверки места. В настоящее время у нас есть несколько представлений, которые включают/отключают на основе булевых флагов (пример Model.IsNew). Я считаю, что мнения должны быть как можно более простыми, и контроллеры должны определять данные для этой точки зрения, а не обязательно, как это работает. Я думаю, что взгляды, частичные или полные, должны быть -только-что делать и обрабатывать это против представления, определяющего, что должно быть показано/скрыто. Очень простой пример выглядит следующим образом, но охватывает обе стороны этого и в основном отражает то, что у нас есть ...Множественные взгляды против одного «сложного» вида в MVC

Контроллер имеет пару методов (post/get), называемых Подробности. [Получить] Подробности имеет единственный параметр, идентификатор и [Сообщение] Подробности принимают id и viewmodel. В столбце метод ~ 30 строк, проверяющий действительную модель, определяет, изменилось ли ее новое, если определенное значение изменилось (триггеры перенаправляют) и т. Д. (Я думаю, что это неверно). Проверка [Get] Details для пустого идентификатора, заполняет необходимые выпадающие списки, ничего необычного (я думаю, это правильно). В самом подробном представлении содержится небольшая часть логики: If (! Model.IsNew) {RenderAction (History => History.Show (id);} (я думаю, что это неверно, шоу должно знать, что отображать, независимо от того, является ли это новым). Плюсом к этому является макет для указанного подробного представления, который не выполняется дважды. Детали/Добавить почти идентичны, минус некоторые отключенные поля в зависимости от состояния (возможно, это должны быть частичные?) - объект может быть отключен/удален делает значения редактируемые или нет.

Мысли, мнения, идеи?

ответ

5

почему бы не создать несколько представлений и действия?

Details 

Edit 
[HttpPost] 
Edit 

Create 
[HttpPost] 
Create 

Тогда они могли бы поделиться объектная модель

public ThingModel 
{ 
    public Thing Thing { get; set; } 
} 

или иметь Создание и редактирование действий использовать более безопасные (предотвращающий инъекции HTML) модель, которая также позволит использовать параметры валидации, построенные в.

public ThingEditorModel 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Value { get; set; } 
    public bool IsNew { get { return Id == 0; } } 
} 

А затем для «Редактирование и создание» вы можете создать редактор EditorTemplate (Shared/EditorTemplates/ThingEditor.ascx), который может использовать Create и Edit.

+0

Я согласен, я думаю, что чем больше вы сможете разделить вверх, тем лучше и повторное использование и злоупотребление там, где это возможно, и обернуть его в форме. Хорошо, так что я не был заброшен? – jeriley 2010-11-30 03:04:51

0

Я думаю, что вы на правильном пути ... используйте «главный» вид для а затем используйте Templated Helpers для «логики». Lean on Html.DisplayFor (x => x.Thing) и EditorFor

Вы определенно не хотите, чтобы макет в двух местах.

+0

не уверен, почему кто-то проголосует за эту идею ... такая же идея, как у меня – hunter 2010-11-29 19:35:00