Use ASP.NET Resource strings from within javascript files

后端 未结 9 1722
迷失自我
迷失自我 2020-12-13 01:02

How would one get resx resource strings into javascript code stored in a .js file?

If your javascript is in a script block in the markup, you can use this syntax:

9条回答
  •  刺人心
    刺人心 (楼主)
    2020-12-13 01:17

    If you have your resources in a separate assembly you can use the ResourceSet instead of the filename. Building on @Domenics great answer:

    public class ResourcesController : Controller
    {
        private static readonly JavaScriptSerializer Serializer = new JavaScriptSerializer();
    
        public ActionResult GetResourcesJavaScript()
        {
            // This avoids the file path dependency.
            ResourceSet resourceSet = MyResource.ResourceManager.GetResourceSet(CultureInfo.CurrentUICulture, true, true);
    
            // Create dictionary.
            var resourceDictionary = resourceSet
                            .Cast()
                            .ToDictionary(entry => entry.Key.ToString(), entry => entry.Value.ToString());
            var json = Serializer.Serialize(resourceDictionary);
            var javaScript = string.Format("window.Resources = window.Resources || {{}}; window.Resources.resources = {1};", json);
    
            return JavaScript(javaScript);
        }
    }
    

    The downside is that this will not enable more than one resource-file per action. In that way @Domenics answer is more generic and reusable.

    You may also consider using OutputCache, since the resource won't change a lot between requests.

    [OutputCache(Duration = 3600, Location = OutputCacheLocation.ServerAndClient)]
    public ActionResult GetResourcesJavaScript()
    { 
        // Logic here...
    }
    

    http://www.asp.net/mvc/overview/older-versions-1/controllers-and-routing/improving-performance-with-output-caching-cs

提交回复
热议问题