0

У меня есть приложение MVC.NET, которое использует Knockout.js (+ knockout.mapping), чтобы иметь дело с некоторыми каскадами выпадающих списков. Данные для них поступают от вызова WebAPI к внешней службе. Так как это происходит, для этой услуги требуется токен аутентификации, срок действия которого истекает через 2 часа, поэтому приложение MVC помещает данные из службы в System.Web.Caching.Cache и возвращает его туда, если токен не истек, где он будет захватывать это снова из службы. Это прекрасно работает. Однако, когда мне нужно получить это в представлении, в настоящее время я использую следующий метод, который должен иметь свойство ViewModel, которому я присвою данные службы/кэша, а затем сделать это на вид:knockout.js внешняя модель js-файл

var model = new ViewModel(@Html.Raw(Json.Encode(Model.ReferenceData))) 
ko.applyBindings(model); 

, где Model.ReferenceData - это данные услуги. снова это прекрасно работает, но ... дело в том, что на странице тогда есть все данные Json, сбрасываемые в нем при каждом запросе. Я хотел бы использовать внешний JS-файл для ReferenceData, так как по крайней мере он может быть кэширован браузером и уменьшить вес страницы для будущих запросов. Однако я полагаю, что накладные расходы на создание JS-файла не так уж малы, вместе с тем, что мне действительно нужно, так это создать ссылку на этот файл, который изменяется почти так же, как встроенный набор MVC-файлов js-файлов работает - генерирует ссылку с запросом. Мой вопрос: есть ли простой способ сделать это? Я уверен, что, когда кеш заполняется в первый раз, сгенерируйте файл js и ссылайтесь на него в представлении, но, как я уже сказал, он получает это, чтобы изменить его ссылку каждый раз, когда он обновляется, или, по крайней мере, данные в нем изменились и обновление только тогда, где проблема.

Любое понимание, чтобы это было бы большим подспорьем

Благодаря

Nat

+2

Вы можете создать метод действия, который возвращает объект JSON и вызвать его с помощью ajax, чтобы заполнить модель просмотра ko. – manji

ответ

0
  1. Версия файла JS (вы можете сохранить GUID в файле он автопортрета).
  2. В приложении Application_Start() этот идентификатор версии устанавливается на статическую переменную.
  3. В контроллере передайте эту статическую переменную данные в ViewBag.
  4. Ref сценарий с этим ID

При регенерировать файл, обновить версию в файл, а также ваши статические переменные. Следующий запрос от клиента получит новую версию с новым ключом.

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

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