Gra*_*ank 28 javascript asp.net resources
如何将resx资源字符串转换为存储在.js文件中的javascript代码?
如果您的javascript位于标记的脚本块中,则可以使用以下语法:
<%$Resources:Resource, FieldName %>
Run Code Online (Sandbox Code Playgroud)
并且它将在渲染页面时解析资源值...不幸的是,只有当javascript出现在页面正文中时才会解析.在<script>标记中引用的外部.js文件中,这些服务器标记显然从未被解析过.
我不想编写ScriptService来返回那些资源或类似的东西,因为它们在页面呈现后不会改变,因此有一些活动的东西是浪费.
一种可能性是编写一个ashx处理程序并将<script>标记指向它,但我仍然不确定如何在.js文件中读取并在将文本流式传输到客户端之前解析任何类似的服务器标记.是否有一行代码可以运行,它将像ASP.NET解析器一样执行该任务?
或者有没有人有任何其他建议?
Dom*_*nic 34
这是我现在的解决方案.我相信我将来需要使它更加通用......但到目前为止,这是好的.
using System.Collections;
using System.Linq;
using System.Resources;
using System.Web.Mvc;
using System.Web.Script.Serialization;
public class ResourcesController : Controller
{
private static readonly JavaScriptSerializer Serializer = new JavaScriptSerializer();
public ActionResult GetResourcesJavaScript(string resxFileName)
{
var resourceDictionary = new ResXResourceReader(Server.MapPath("~/App_GlobalResources/" + resxFileName + ".resx"))
.Cast<DictionaryEntry>()
.ToDictionary(entry => entry.Key.ToString(), entry => entry.Value.ToString());
var json = Serializer.Serialize(resourceDictionary);
var javaScript = string.Format("window.Resources = window.Resources || {{}}; window.Resources.{0} = {1};", resxFileName, json);
return JavaScript(javaScript);
}
}
// In the RegisterRoutes method in Global.asax:
routes.MapRoute("Resources", "resources/{resxFileName}.js", new { controller = "Resources", action = "GetResourcesJavaScript" });
Run Code Online (Sandbox Code Playgroud)
所以我能做到
<script src="/resources/Foo.js"></script>
Run Code Online (Sandbox Code Playgroud)
然后我的脚本可以引用eg window.Resources.Foo.Bar并获取一个字符串.
Ric*_*ahl 19
没有原生支持.
我不久前构建了一个JavaScriptResourceHandler,可以通过对象将Serverside资源提供给客户端页面,其中对象上的每个属性代表本地化资源ID及其值.您可以查看此内容并从此博客文章下载:
http://www.west-wind.com/Weblog/posts/698097.aspx
我已经在很多应用程序中广泛使用它,它运行良好.主要的胜利是你可以在一个地方(Resx或我的情况下使用数据库定制ResourceProvider)本地化你的资源,而不是必须有多个本地化方案.
小智 5
而“ Common”是资源文件的名称,而Msg1是字段名。这也适用于文化变革。
Partial Javascript...:
messages:
{
<%=txtRequiredField.UniqueID %>:{
required: "<%=Resources.Common.Msg1 %>",
maxlength: "Only 50 character allowed in required field."
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
40372 次 |
| 最近记录: |