2

翻訳された文字列を含む JavaScript ファイルをサーバー上に動的に作成します。 Chrome インスペクターを見ると、このファイルはキャッシュされません (Scripts フォルダーにある他の実際の JS ファイルはキャッシュされます) *なぜそうではないのですか? *

<script src="somepath/Scripts/translate-nl-BE.js"></script>
or
<script src="somepath/Scripts/translate-en-GB.js"></script>

これは、次の MVC アクションにマップされます。

[HttpGet]        
public ActionResult TranslateJS(string culturecode) {
     ViewBag.JSCulture = culturecode;
     Response.ContentType = "text/javascript";
     return PartialView("TranslateJS");
}

ビューは次のとおりです。

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<dynamic>" %>
<%
    string culturecode = ViewBag.JSCulture;
%>
var translations = <%=new System.Web.Script.Serialization.JavaScriptSerializer().Serialize((ViewBag.Translate as List<ERPManager.TranslationService.FlatTranslation>).Where(x=>x.CultureCode==culturecode).ToDictionary(t=>t.Key,f=>f.Value)) %>;

これは基本的にjson配列をシリアル化するだけです(これは単にjsonresultを返すよりも汚いように見えますが、このファイルをajaxで呼び出すことはできません。スクリプトタグにリンクする必要があります

これは、サーバーから取得した応答です。

Cache-Control:private
Content-Length:10987
Content-Type:text/javascript; charset=utf-8
Date:Thu, 04 Apr 2013 10:15:11 GMT
Server:Microsoft-IIS/7.5
X-AspNet-Version:4.0.30319
X-AspNetMvc-Version:3.0
X-Powered-By:ASP.NET

get が返すファイルのプレビューを次に示します。これは基本的に、翻訳の単なるキー値ディクショナリです。

var translations = {"vertaald":"Vertaald","gerelateerd":"Gerelateerd","details":"Details"};
4

1 に答える 1

2

あなたが望むのはexpires HTTPヘッダーのようです

これは MVC コードで設定できます。

[HttpGet]        
public ActionResult TranslateJS(string culturecode) {
   ViewBag.JSCulture = culturecode;
   Response.ContentType = "text/javascript";
   Response.Expires = (60*24);//24 hours
   return PartialView("TranslateJS");
}

expires ヘッダーを設定すると、キャッシュされたコンテンツが「期限切れ」になるまで、ブラウザーはファイルを再度要求しないことに注意してください。注意して使用してください!

于 2013-04-04T11:01:09.460 に答える