2009-08-20 7 views
1

ScriptManagerで参照されているjsファイルのパス(例: "custom.js?2009082020091417")に "最終変更日時"を追加したい場合があります。私のMasterPageに含まれています)とScriptManagerProxies(コンテンツページ)にあります。コード内のScriptManagerプロキシへのアクセス

私は簡単にコードでScriptManagerにアクセスし、それをScriptsコレクションを通して反復して、宣言的に設定したスクリプトパスを取得し、 "?[lastmodifiedtimestamp]"の新しいパスを "設定"します。

問題は、存在する可能性のあるScriptManagerProxiesにアクセスする方法がわかりません。

デバッグ時に、非公開メンバー(._proxies)のプロキシを確認できます。私はドキュメントを見てきましたが、あなたが実際にこのコレクションに一般にアクセスできる場所はわかりません。

私に何かが不足していますか?

私は私のコンテンツページのPage_PreRenderCompleteイベントの基本クラスに次のコードを持っている:

ScriptManager sm = ScriptManager.GetCurrent((Page)this); 
if(sm != null) 
{ 
    foreach (ScriptReference sr in sm.Scripts) 
    { 
     string fullpath = Server.MapPath(sr.Path); 
     sr.PathWithVersion(fullpath); //extension method that sets "new" script path 
    } 
} 

は、上記のコードは、私が私のマスターページで定義したスクリプトを1つ提供しますが、私は持っていない他の二つのスクリプト私のコンテンツページのScriptManagerProxyで定義されています。

答えて

4

解決策を挙げてください。マージされたすべてのスクリプトにアクセスできる唯一の場所は、ScriptManagerの主なResolveScriptReferenceイベントです。この場合、定義されたパスを持つスクリプトごとに、jsファイルの最終更新日に基づいて「バージョン番号」を指す拡張メソッドを使用します。 jsファイルが「バージョン化」されたので、jsファイルを変更すると、ブラウザは古いバージョンをキャッシュしません。

マスターページコード:

protected void scriptManager_ResolveScriptReference(object sender, ScriptReferenceEventArgs e) 
{ 
    if (!String.IsNullOrEmpty(e.Script.Path)) 
    { 
     e.AddVersionToScriptPath(Server.MapPath(e.Script.Path)); 
    } 
} 

拡張メソッド:

public static void AddVersionToScriptPath(this ScriptReferenceEventArgs scrArg, string fullpath) 
{ 
     string scriptpath = scrArg.Script.Path; 

     if (File.Exists(fullpath)) 
     { 
      FileInfo fi = new FileInfo(fullpath); 
      scriptpath += "?" + fi.LastWriteTime.ToString("yyyyMMddhhmm"); 
     } 

     scrArg.Script.Path = scriptpath; 
} 
+0

JSのための魔法のように動作しますが、どのようにあなたがあなたのJavascriptに関連したリソースファイル(例えばCSSを扱うか(だろう?)画像など)? – jerhewet

関連する問題