在Razor视图中使用资源字符串(.resx)很容易,但是如何在
JavaScript文件中执行?目前,我手动将字符串从Razor视图传递给JavaScript构造函数参数中的脚本,但我想要一种更自动的方法,所以我不必传递我需要的每个资源字符串.
解决方法
我使用的解决方案是使用Razor创建一个json对象,该对象包含给定应用程序区域的所有资源字符串,例如“Customers”.像这样:
<script type="text/jscript"> @{ ResourceSet resourceSet = JsCustomersRes.ResourceManager.GetResourceSet(CultureInfo.CurrentUICulture,true,true); var sbInitial = " var CustomersResourceObj = {"; var sb = new StringBuilder(sbInitial); var resEnum = resourceSet.GetEnumerator(); while (resEnum.MoveNext()) { if (sb.ToString() != sbInitial) { sb.Append(","); } sb.Append("\"" + resEnum.Key + "\":\"" + resEnum.Value.ToString().Replace("\r\n","").Replace("\"","\\\"") + "\""); } sb.Append("}"); } @(Html.Raw( sb.ToString()));
资源文件“JsCustomersRes”可以与特定的控制器视图目录一起放置在共享视图目录中.
它应该在文件高级属性中设置“自定义工具”为“PublicResXFileCodeGenerator”.
然后,您可以从脚本中的json对象获取资源字符串:
var resString = CustomersResourceObj[key];
其中“key”是您想要的资源字符串的关键字符串.只需将剃须刀作为部分视图添加到布局页面或单独的页面,就可以了,就是这样!