1. 程式人生 > >ASP.NET MVVM結構--之views 和 controller 訪問本地資原始檔

ASP.NET MVVM結構--之views 和 controller 訪問本地資原始檔

昨天晚上又犯了老毛病,不知道其他碼農是否會有同樣的毛病(= . =|||),就是每次一遇到棘手的bug,就會憋渴憋尿的扎進去研究,每次這樣解決完問題後連跑著去廁所都不敢了。鬱悶,其實這樣效率反而不高,自己很清楚,對身體不好而且長時間這樣盯著思路也會堵塞,每次都對自己說不能這樣不能這樣,而每次又這樣又這樣,madan,記性給dog叼了麼!!好吧,還是要提醒一下自己下次不能這樣的,身體是革命的本錢捏。。。好了,下面ASP.NET MVVM框架中views 和controller訪問本地資原始檔的方法。

1、資原始檔(App_GlobalResources/Resource.resx)

在開發基於資源 app 時,您必須在具有.txt或.restext擴充套件的文字檔案、或是具有.resx 副檔名的

XML檔案來儲存資源資訊資原始檔生成器 (resgen.exe)建立一個二進位制.resources 檔案,可以嵌入到附屬程式集中。

理想情況下,您應建立資源您的應用程式支援的每種語言的或至少每種語言的有意義的子集。二進位制 .resources 檔名稱遵循命名basename約定。cultureName.resources,basename這app的名稱或選件類的名稱,根據詳細程度要。應命名為basenameapp 的預設值區域性的資源.resources。

例如,假設程式集具有多個資源在一個基名稱MyResources 的資原始檔。 這些資原始檔應具有名稱 (如日本 (日文) 區域性的區域性德語的 MyResources.ja-JP.resources,簡化的中文區域性的 MyResources.de.resources,比利時法語 () 區域性的 MyResources.zh-CHS.resources 和 MyResources.fr-BE.resources。

預設資原始檔應命名為 MyResources.resources。區域性特定的資原始檔通常打包在每種區域性的附屬程式集內。在應用程式的主程式集應嵌入預設值資原始檔。




2、Views中訪問ResourceTest.resx中的資源

注意:引用了名稱空間,使用的是razor檢視引擎

@{
    Layout = null;
}
@using Resources

@RenderBody()

<div>
    <ul>
        <li>@ResourceTest.name</li>
        <li>@ResourceTest.age</li>
        <li>@ResourceTest.gender</li>
    </ul>
</div>

3、在javascript中訪問資原始檔ResourceTest.resx

js檔案中不能直接引用名稱空間來訪問本地資原始檔,因為該資原始檔編譯在後臺。但是我們可以通過controller來訪問,再在js檔案中使用ajax呼叫controller。

3.1 Controller檔案(ResourceController.cs)

ResourceManager Object 

namespace StoreTasksWebRole.Controllers
{
    using System.Collections;
    using System.Collections.Generic;
    using System.Globalization;
    using System.Linq;
    using System.Web.Http;
    using System.Web.Http.Results;

          [HttpGet]
        public JsonResult<Dictionary<string, string>> Get()
        {
            var resourceSet = Resources.ResourceTest.ResourceManager
                .GetResourceSet(CultureInfo.CurrentUICulture, true, true)
                .Cast<DictionaryEntry>()
                .ToDictionary(x => x.Key.ToString(), x => x.Value.ToString());

            return Json(resourceSet);
        }
    }
}
3.2 js檔案
<pre class="javascript" name="code">$.ajax({
   cache: false,
   url: '/' + culture +'/api/ResourceTest?v=' + (new Date().getTime()),
   dataType: 'json',
   method: "GET",        
   success: function (data) {
   StoreTask.Resources = data;   
   var name = StoreTask.Resources.name;    
   }
});


這樣天,看到都困了== ZZZZ