2012-02-15 18 views
2

Asp.netチームは、ページごとに1つのインスタンス(HttpHandler)し​​か存在しないようなスクリプトマネージャを設計しました。なぜなら、ScriptManager.GetCurrentのようなメソッドを拡張した理由がわかりません。ページ。なぜ開発者は、実際のScriptManagerにアクセスするページの分離コードファイル以外の場所があるかもしれないので、私は信じてScriptManager.GetCurrentメソッドの背後にある理由

if(ScriptManager == null) 
{ 
    throw new Exception("The Below ajax control requires ScriptManager in the page"); 
} 
+0

ScriptManagerはScriptManagerコントロールのIDなのでしょうか? ScriptManagerがMasterPage上にある場合、ユーザーコントロールからのIDへのアクセス権はありません。 – slfan

+0

@slfan申し訳ありませんが、私はここにシナリオを置いていませんでした。任意のASPファイル(usercontrol、masterpage、子ページ、ネストされたmasterpage)になります。 Asp.netのチームは、ページ内のScriptManagerインスタンスを認識する方法を考案しましたが、ページ内のリクエスト/レスポンスに 'Current' ScriptManagerクラスを設定しませんでした(これはIDを持つ可能性がありますsManager、resourceManagerなど)のようなものです。メンバシップが有効になっているときに 'User.Identity.Name'を使ってログインした人のユーザ名を取得できます。私はこれが純粋に従来のもので、将来のための意思決定であると感じています:) – Deeptechtons

答えて

2

を行うことができませんでした。静的メソッドGetCurrent()を使用すると、コードのどこからでも(たとえばクラスライブラリから)現在のコンテキストのScriptManagerにアクセスできます。

public static ScriptManager GetCurrent(Page page) 
{ 
    if (page == null) 
    { 
     throw new ArgumentNullException("page"); 
    } 
    return page.Items[typeof(ScriptManager)] as ScriptManager; 
} 

したがって、それはのScriptManagerインスタンスへのアクセスを取得するだけのショートカットです:GetCurrentの実装では、このようになります。

ScriptManagerがマスターページで定義されている場合、コンテンツページまたはユーザーコントロールからコードが機能しません。

+0

'request'と' response'が存在する 'HttpContext.Current'権利の背後にあるコード以外の> (これもスクリプトマネージャを意味します) – Deeptechtons

+0

trueですが、それはショートカットです。私はGetCurrentの実装を追加しました – slfan

関連する問題