Где следует подготовить объекты, не являющиеся моделями представления, для представления MVC Asp.net - PullRequest
0 голосов
/ 25 ноября 2010

Мне нужно немного ясного мышления , чтобы дать несколько хороших советов о том, как это нужно делать в лучшем виде.

Проблема

Я создаю приложение Asp.net MVC. Большинство моих просмотров имеют панель инструментов вверху. Панель инструментов может иметь несколько различных элементов, например:

  • Кнопка
  • примечания
  • сбросить элементы (динамическое пространство ширины, которое используется для размещения некоторых кнопок в крайней правой части панели инструментов)
  • и т.д.

Чтобы следовать принципу СУХОЙ Я создал набор общих частичных представлений (Toolbar, Toolbar.Button и т. Д.), Которые отображают предопределенный объект панели инструментов. Эти частичные представления, конечно, строго типизированы.

Тогда у меня есть строгие представления, модели которых связаны с отображаемыми данными. Но у них также часто есть панель инструментов. Поэтому перед вызовом Html.RenderPartial("Toolbar", toolbar) я должен подготовить этот список объектов IList<ToolbarItemBase>, чтобы передать его ему.

Проблема в том, что я готовлю это в самом представлении. Этот список объектов панели инструментов всегда одинаков для конкретной страницы и также локализован. Элемент кнопки панели инструментов также имеет свойство Url, которое устанавливается с помощью помощника Url.Action () , что делает невозможным просто сохранить сериализованные экземпляры панели инструментов в базе данных. Дело в том, что эти определения панели инструментов могут стать очень большими (подумайте о ленте Word и количестве элементов в ней)

Вопрос

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

Ответы [ 2 ]

1 голос
/ 02 мая 2011

Я хотел бы рассмотреть возможность использования помощников Action / RenderAction в ASP.NET MVC 3.

По сути, помощник Action позволяет настроить «дочерний запрос» для действия контроллера, которое может построить модель и отобразить частичное представление (а результаты частичного представления будут отображены во внешнем представлении, где вы используете @Html. Действие (...)).

Итак ... в вашем сценарии у вас будет действие контроллера, предназначенное для построения модели представления для панели инструментов и частичной визуализации панели инструментов. Вызовите это действие, используя Html.Action из макета или представления содержимого, для которого требуется панель инструментов.

Надеюсь, это поможет,

0 голосов
/ 25 ноября 2010

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

PS Я бы, вероятно, за это проголосовал, но рассматривали ли вы возможность вернуться к WebForms вместо MVC?Если вы намерены имитировать интерфейс настольного приложения со всеми его функциональными возможностями и сложностью, MVC, возможно, вам не подойдет.В двух словах, MVC для веб-сайтов, веб-формы для веб-приложений.

...