将资源字符串暴露给ASP.NET MVC中的JavaScript文件的最佳方法是什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (9)

很容易使用资源字符串(。在Razor视图中,但是如何在JavaScript文件中做到这一点呢?目前,我正在手动地将字符串从Razor视图传递到JavaScript构造函数参数中的脚本,但是我希望能够更自动地实现这一点,这样我就不必传递我需要的每个资源字符串。

提问于
用户回答回答于

1. 在App_GlobalResources文件夹中创建资源文件RLocalizedText.resx。并创建填充所有的字符串。

2.创建ResourcesController

using System.Web.Mvc;

namespace PortalACA.Controllers
{
    public class ResourcesController : Controller
    {
        // GET: Resources
        public ActionResult Index()
        {
            Response.ContentType = "text/javascript";
            return View();
        }
    }
}

3. 从ResourcesController 创建Index.cshtml视图

@using System.Collections
@using System.Globalization
@using System.Resources
@using Resources
@{
    Layout = null;
    // Get a set of resources appropriate to
    // the culture defined by the browser
    ResourceSet resourceSet =
      @RLocalizedText.ResourceManager.GetResourceSet
        (CultureInfo.CurrentUICulture, true, true);
}

// Define the empty object in javascript
var Resources = {};
@foreach (DictionaryEntry res in resourceSet)
{
    // Create a property on the javascript object for each text resource
    @:Resources.@res.Key = "@Html.Raw(
        HttpUtility.JavaScriptStringEncode(res.Value.ToString()))";
}

选择你想要使用它的地方。

4A(布局)。如果你想在整个网站上使用它,那么需要通过@RenderSection 在_Layout(共享视图)上放置这个脚本引用

<script src="@Url.Content("~/Resources/Index")"></script>
@RenderSection("scripts", required: false)

4B(查看)。如果你只想在某些视图中看到。

@section Scripts
{
  <script src="@Url.Content("~/Resources/Index")"></script>
}

5.现在是时候使用它了。选择一个您需要查看资源文件中的字符串的视图并放置此代码。

@section Scripts
{
  <script>
    $(document).ready(function () {
      alert(Resources.General_Excepcion);
    });
  </script>
}
用户回答回答于

我使用的解决方案是使用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”可以与特定的控制器视图目录或共享视图目录一起放置。它应该在文件高级属性中将“CustomTool”设置为“PublicResXFileCodeGenerator”。

然后可以从脚本中的json对象获取资源字符串:

var resString = CustomersResourceObj[key];

其中“key”是所需资源字符串的键字符串。只需添加Razor作为部分视图到你的布局页面或个人页面,根据您的需要,就这样!

扫码关注云+社区