首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WestWind.Globalization阻止的更新中的意外行为

WestWind.Globalization阻止的更新中的意外行为
EN

Stack Overflow用户
提问于 2014-08-04 22:32:18
回答 1查看 781关注 0票数 0

正如标题所暗示的那样,我使用WestWind.globalisation作为支持多种语言的数据库资源提供者。

问题是,资源提供者本身似乎不愿意反映我在应用程序中所做的更改。

举个例子:

我有一个元素:

代码语言:javascript
复制
<asp:Image runat="server" ID="img_placeholder" ImageUrl="~/images/BigPicture.jpg" />

我已经将以下数据插入到我的本地化表中:

代码语言:javascript
复制
pk  ResourceId              Value                          LocaleId  ResourceSet
--------------------------------------------------------------------------------
391 ImgBigPicture.ImageUrl  ~/images/BigPicture-en-US.jpg   en-US    Site.master
392 ImgBigPicture.ImageUrl  ~/images/BigPicture.jpg              Site.master
393 ImgBigPicture.ImageUrl  ~/images/BigPicture-fr-FR.jpg   fr-FR    Site.master

在此之后,我将标记更改为:

代码语言:javascript
复制
<asp:Image runat="server" ID="img_placeholder" ImageUrl="~/images/BigPicture.jpg" meta:resourceKey="ImgBigPicture"/>

当我刷新或重新生成应用程序时,浏览器中不显示更改。图片url保持不变。在任何给定的元素上都可以观察到相同的情况,无论是asp:Label还是asp:Button

有时重新启动IIS就足够了;有时重新启动Visual Studio和Chrome就足以使更改生效。大多数情况下,我需要重新启动服务器,以便所有内容都以其当前和实际状态显示。当它发生时,我可以切换我的UIculture,属性也会相应地改变。

我不知道发生了什么,单步执行代码并没有向我揭示任何东西。

我对如何处理这个问题的任何建议和解决方案都持开放态度。

EN

回答 1

Stack Overflow用户

发布于 2015-03-16 17:03:49

按照资源集在.NET中的工作方式,它们只加载一次,然后缓存到内存中。这意味着当ASP.NET第一次请求ResourceSet时,将加载资源,然后在AppDomain重新启动之前再也不加载资源。因此,您对db Resources所做的任何更改都不会立即反映出来。

在管理表单上有一个选项,允许您卸载DbResources。dbResourceProvider支持使用此机制卸载资源,以便在下一次访问时强制重新加载。因此,除非您这样做,否则资源将不会重新加载。

IIS重启、应用程序池回收或甚至web.config更改(任何导致AppDomain关闭和重启的更改)也将清除资源并重新开始。

如果您仍然看到相同的资源,那么您可能正在处理浏览器缓存。Chrome在浏览器缓存方面尤其激进,图像通常只有在显式加载到窗口中并进行硬刷新(Shift-f5)时才会重新加载。如果你在Chrome中测试,你想看到新的图像,使用开发者工具清除浏览器缓存选项来完全清除你的缓存(或者右键点击刷新按钮,然后选择清除缓存并重新加载)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25121125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档