C# 在JavaScript中使用服务器端资源

C# 在JavaScript中使用服务器端资源,c#,javascript,asp.net,asp.net-mvc,C#,Javascript,Asp.net,Asp.net Mvc,我正在更新我的ASP.NET项目,以使用更多的JavaScript和AJAX。我已经重构了HTML的一部分,以便使用JavaScript创建它们,但是现在我不能再使用本地资源文件的值了 我的项目的结构是,每个页面/用户控件都有自己的一组本地资源和一组.js文件 是否有一个简单/优雅的解决方案来使用JavaScript中的本地资源? 我更希望看到一些东西,它接受myfile.js文件,通过查看当前语言对其进行解析,并输出一些myfile.en.js 更新 我想如何工作: <script sr

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

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

是否有一个简单/优雅的解决方案来使用JavaScript中的本地资源? 我更希望看到一些东西,它接受myfile.js文件,通过查看当前语言对其进行解析,并输出一些myfile.en.js

更新

我想如何工作:

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

函数showMessage(){
警报(GetLocalResource(“警报消息”));
}

是。创建一个
控制器
,或
ApiController
,从文件夹或resx文件中读取资源

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

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


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

是。创建一个
控制器
,或
ApiController
,从文件夹或resx文件中读取资源

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

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


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

在我的例子中,我发现将RESX文件转换为JSON文件,然后将它们加载到客户端JavaScript中效果很好

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

{ "myLabel": "hello world!" }
现在的问题是为用户的文化加载正确的资源。如果您使用RESX这样的约定,并且文件被称为类似于
MyResources.en US.json
,如果您使用当前用户的区域性编写cookie,则只需将其连接如下:
“MyResources.”+culturecokievalue+“.json”

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

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

  var myLabel = resources.myLabel;
});
这就是我的想法。现在,如果您开发它,您可以创建一些抽象,这样您的客户端代码就可以使用这种方法访问这些资源


建议:您可以使用MSBuild在生成时转换RESX

在我的例子中,我发现将RESX文件转换为JSON文件,然后将它们加载到客户端JavaScript中效果很好

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

{ "myLabel": "hello world!" }
现在的问题是为用户的文化加载正确的资源。如果您使用RESX这样的约定,并且文件被称为类似于
MyResources.en US.json
,如果您使用当前用户的区域性编写cookie,则只需将其连接如下:
“MyResources.”+culturecokievalue+“.json”

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

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

  var myLabel = resources.myLabel;
});
这就是我的想法。现在,如果您开发它,您可以创建一些抽象,这样您的客户端代码就可以使用这种方法访问这些资源


建议:您可以使用MSBuild在生成时转换RESX

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


下面是一个示例,介绍如何编写自己的Http处理程序来动态创建小型JavaScript。也许您可以使用翻译选项扩展此功能,并不仅输出缩小的文件,还输出已翻译的文件



写下你迄今为止所做工作的一些代码。。我们怎样才能确定你的问题呢?把你迄今为止所做的事情写下来。。我们如何识别你的问题这是一个很好的方法。这样做的主要问题是,您可能会停止执行大量请求(直到它被完全缓存…)。我错了吗?此解决方案可用于多种资源吗?按照我阅读您答案的方式,我的JavaScript需要对每个本地追索字符串进行GET调用,我认为这不是一个优雅的解决方案;甚至盲目地吐出经理的每一个资源。我添加了最后一段来回答你的问题。这是一个很好的方法。这样做的主要问题是,您可能会停止执行大量请求(直到它被完全缓存…)。我错了吗?此解决方案可用于多种资源吗?按照我阅读您答案的方式,我的JavaScript需要对每个本地追索字符串进行GET调用,我认为这不是一个优雅的解决方案;我添加了最后一段来回答你的问题。它不再相关,而且我只想放一个:),但有一个15个字符的限制:PI不想为我的本地化打额外的电话,因为我已经有很多ajax电话,我想把电话号码保持在较低的水平。我可以在呈现基本HTML时将其放入变量中。我要试试看@好吧,你可以将所有资源合并到一个JSON文件中,并将其加载到整个页面。@Matías Fidemraizer你有我如何做到这一点的例子吗?@jfamvg我在我自己的项目中做过,也在我的工作中实现过,但我没有公开。但是,如果您可以创建整个单独的JSON文件,那么就需要使用文件I/O和conca