【问题标题】:Using server side resources in JavaScript在 JavaScript 中使用服务器端资源
【发布时间】:2014-05-05 21:33:55
【问题描述】:

我正在更新我的 ASP.NET 项目以使用更多的 JavaScript 和 AJAX。我重构了部分 HTML,以便使用 JavaScript 创建它们,但现在我无法再使用本地资源文件的值了。

我的项目结构是每个页面/用户控件都有自己的一组本地资源和一组自己的 .js 文件。

有没有简单/优雅的解决方案来使用 JavaScript 中的本地资源? 最好我希望看到一些获取 myfile.js 文件的内容,通过查看当前语言对其进行解析,并输出一些 myfile.en.js

更新

我想怎么工作:

<script src="../message.js"></script>
function showMessage(){
alert(GetLocalResource("AlertMessage"));
}

【问题讨论】:

  • 放一些你到目前为止所做的代码。我们如何识别你的问题

标签: c# javascript asp.net asp.net-mvc


【解决方案1】:

是的。创建一个 ControllerApiController,从您的文件夹或 resx 文件中读取资源。

要从 resx 文件中读取,请使用 ResourceManager

网上有很多关于一般结构的例子。喜欢这个:Display image from database in asp mvc。当然,您不仅可以将其用于图像,还可以用于任何类型的文件。

您可以按照您想要的方式映射传入参数,例如filename,如果需要,您可以对其进行后处理以替换内容。您还可以设置一些 HTTP 标头来处理缓存。

【讨论】:

  • 这是一个很好的方法。这样做的主要问题是您可能会结束执行大量请求(直到它被完全缓存......)。我错了吗?
  • 此解决方案是否可用于多种资源?我阅读您的答案的方式是,我的 JavaScript 需要对每个本地资源字符串进行 GET 调用,我认为这不是一个优雅的解决方案。
  • 没有什么能阻止控制器做出复杂的决定来为单个有效负载连接哪些脚本;甚至一味地吐出管理器中的所有资源。
  • 我添加了最后一段来回答你的问题。
【解决方案2】:

就我而言,我发现将 RESX 文件转换为 JSON 文件,然后将它们加载到客户端 JavaScript 中效果很好。

由于 RESX 是 XML,使用 LINQ-to-XML,您可以将每个节点转换为键,并将每个值转换为键值:

{ "myLabel": "hello world!" }

现在的问题是为用户的文化加载正确的资源。如果你使用像RESX这样的约定并且文件被称为MyResources.en-US.json,如果你用当前用户的文化编写一个cookie,它只是将它连接起来如下:"MyResources." + cultureCookieValue + ".json"

最后,你可以使用 jQuery 来加载整个资源:

$.getJSON("/JsonResources/MyResources." + cultureCookieValue + .json").done(function(resources) {

  var myLabel = resources.myLabel;
});

这只是想法。现在,如果您开发它,您可以创建一些抽象,以便您的客户端代码可以使用这种方法访问这些资源。

建议:您可以使用 MSBuild 在构建时转换 RESX!

【讨论】:

  • 它不再相关,而且我只是想放一个:),但是有15个字符的限制:P
  • 我不想为我的本地化打额外的电话,因为我已经有很多 ajax 调用,我想减少这个数字。我可以将它放在渲染基本 HTML 的变量中。我要试试!
  • @jfamvg 好吧,您可以将所有资源合并到一个 JSON 文件中并为整个页面加载它。
  • @Matías Fidemraizer 你有一个例子我该怎么做吗?
  • @jfamvg 我在自己的项目中做,也在我的工作中实施它,但我没有向公众公开。但是,如果您可以创建整个单独的 JSON 文件,那就是使用文件 I/O 并将所有文件连接到一个文件中,然后 File.WriteAllText 就可以了!
【解决方案3】:

这是一个关于如何编写自己的 Http 处理程序以动态创建缩小 JavaScript 的示例。也许您可以使用翻译选项扩展它,不仅输出缩小的文件,还输出翻译文件。

http://weboptimizer.codeplex.com/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-14
    • 2011-10-05
    • 2015-12-05
    相关资源
    最近更新 更多