Отслеживание загруженных скриптов на страницу с помощью ViewData

В настоящее время я пытаюсь найти хороший способ загружать файлы javascript только тогда, когда они мне нужны. Чтобы сделать это, я создал несколько HtmlHelpers для ссылок на фейсбоксы, полей datepickerfields, tinymcefields и других скриптов, которым нужен внешний js и выражение инициализации jquery. В этих помощниках я выполняю скрипт с помощью jQuery getScript() и использую его функцию обратного вызова для запуска скрипта.

Теперь приходит моя проблема. Моя первоначальная мысль заключалась в том, чтобы отслеживать эти сценарии в списке строк и помещать их в htmlHelper.ViewData. Но, к сожалению, это не удается. По какой-то причине эти данные просмотра не передаются в частичные представления или что-то подобное; не сохраняет список..

Есть ли другое место, где я могу глобально хранить свой список строк вместо ViewDataDictionary помощника, или я неправильно использую этот ViewData и должен ли я передать его по какой-то причине? Любые разъяснения или помощь будут очень признательны!


person Leon    schedule 26.10.2009    source источник


Ответы (1)


Вы можете использовать коллекцию HttpContext.Current.Items для хранения данных, относящихся к текущему запросу.

Тем не менее, я думаю, вам следует перепроектировать свою архитектуру, чтобы она не полагалась на глобальные переменные (какими в вашем случае являются ViewData и Items).

Взгляните на это: Как мне добавить JavaScript в ASP.NET MVC View? и т.п.

person Egor Pavlikhin    schedule 26.10.2009
comment
Спасибо! Использование HttpContext.Current.Items помогло. На данный момент это решает мою проблему. Какие именно могут быть недостатки использования глобальных переменных в подобных ситуациях? Мне не очень нравится идея определять и инициализировать мои сценарии в каждом используемом представлении. - person Leon; 26.10.2009
comment
Когда вы используете глобальную переменную, вы вообще пропускаете архитектурные ограничения, поэтому теоретически поддерживать такой код сложнее. Вам не нужно инициализировать все сценарии сразу, вы можете сделать это по запросу, как сейчас, но добавьте код инициализации в соответствующий заполнитель в контейнере, который затем будет добавлен на главную страницу. Таким образом, ваша главная страница ничего не должна знать о представлениях. - person Egor Pavlikhin; 26.10.2009