Передача контекстной информации в Views в ASP.NET MVC - PullRequest
4 голосов
/ 25 мая 2010

Интересно - каков наилучший способ предоставления контекстной (т.е. не связанной с каким-либо конкретным видом, но всем одновременно) информации для представления (или главной страницы)?

Рассмотрим следующий сценарий.

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

Чтобы удовлетворить эти требования, я планирую создать фрагмент JavaScript, который скроет вкладку текущего языка на клиенте. Для этого мне нужен идентификатор текущей языковой вкладки на клиенте. Итак, мне нужен какой-то способ передачи идентификатора на главную страницу (чтобы он был «встроен» в сценарий js).

Лучшее, что я могу придумать, это то, что все мои ViewModels должны наследовать некоторый ViewModeBase, который имеет поле для хранения идентификатора вкладки текущего языка. Затем, какой бы вид я ни отображал, этот идентификатор всегда будет доступен для скрипта скрытия главной страницы.

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

Есть идеи?

Ответы [ 2 ]

1 голос
/ 25 мая 2010

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

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

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

Если вы думаете, что ViewModeBase вырастет до очень больших размеров, вы также можете использовать ViewModel для реализации интерфейса.

Вид или Частичное может иметь тип этого интерфейса. Это особенно полезно, если только некоторые страницы имеют такую ​​функцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...