【发布时间】:2014-11-02 14:00:01
【问题描述】:
我有一个 MVC.NET 应用程序,它使用 Knockout.js (+ knockout.mapping) 来处理一些级联下拉菜单。这些数据来自对外部服务的 WebAPI 调用。碰巧此服务需要一个身份验证令牌,该令牌在 2 小时后过期,因此我让 MVC 应用程序将来自服务的数据放入 System.Web.Caching.Cache 并从那里返回它,除非令牌已过期它将抓取它再次从服务。 这工作正常。 但是,当我需要将其发送到视图时,我目前正在使用以下方法,即拥有 ViewModel 的属性,我将服务/缓存数据分配给该属性,然后在视图中执行此操作:
var model = new ViewModel(@Html.Raw(Json.Encode(Model.ReferenceData)))
ko.applyBindings(model);
其中Model.ReferenceData 是来自服务的数据。
再次,这工作正常,但是......问题是这样的,然后页面在每次请求时都会将所有 Json 数据转储到其中。
我想为 ReferenceData 使用外部 JS 文件,因为至少它可以被浏览器缓存并减轻未来请求页面的权重。
但是,我想生成 JS 文件的开销并没有那么小,而且——我真正需要的是生成指向该文件的链接,该链接的更改方式与内置的 MVC 捆绑 js 文件的工作方式大致相同– 使用查询字符串生成链接。
我的问题是:有没有一种简单的方法可以做到这一点?
当然,当第一次填充缓存时,我可以生成一个 js 文件并从视图中引用该文件,但正如我所说,每次刷新时都要更改其链接——或者至少确定数据是否在它已经改变了,然后才更新它是问题所在。
对此的任何见解都会有很大帮助
谢谢
纳特
【问题讨论】:
-
您可以创建一个返回 JSON 对象的操作方法,并使用 ajax 调用它来填充 ko viewmodel。
标签: javascript asp.net-mvc caching knockout.js bundling-and-minification