ScriptManagerを本質的に抽象化するコントロールを構築しようとしています。通常のScriptManagerにできるだけ近い外観/感触にする必要があります。これは、「#if not DEBUG」ステートメントを使用して、リリース用の.jsファイルをCompositeScriptに動的にロードできるだけでなく、開発環境でのデバッグを容易にするためです。
これが私がこれまで遊んでいたことです(コントロールマークアップには空のScriptManagerProxyしか含まれていません):
Public Partial Class MyScriptManager
Inherits System.Web.UI.UserControl
Dim mlScripts As New List(Of ScriptReference)
Dim mlServices As New List(Of ServiceReference)
リージョン「プロパティ」
Public Property Scripts() As List(Of ScriptReference)
Get
Return mlScripts
End Get
Set(ByVal value As List(Of ScriptReference))
mlScripts = value
End Set
End Property
Public Property Services() As List(Of ServiceReference)
Get
Return mlServices
End Get
Set(ByVal value As List(Of ServiceReference))
mlServices = value
End Set
End Property
終了リージョン
Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
#If DEBUG Then
LoadNonComposite()
#Else
LoadComposite()
#End If
For Each scr As ServiceReference In mlServices
smScriptManagerProxy1.Services.Add(scr)
Next
End Sub
リージョン「ヘルパーメソッド」
Private Sub LoadComposite()
For Each sr As ScriptReference In mlScripts
smScriptManagerProxy1.CompositeScript.Scripts.Add(sr)
Next
End Sub
Private Sub LoadNonComposite()
For Each sr As ScriptReference In mlScripts
smScriptManagerProxy1.Scripts.Add(sr)
Next
End Sub
終了リージョン
エンドクラス
ScriptReferencesが正しく登録されていないようです。DEBUGでは、複数のスクリプトがロードされているというエラーが発生し、RELEASEでは、「sys notdefined」(Ajaxライブラリがロードされていない)が発生します。ScriptReferenceProfilerを使用して、読み込まれているすべての.jsを取得し、手動で追加します(別名、「MicrosoftAjax.js」はマークアップでScriptManagerに手動で追加されます)
どんな助け/指示も大歓迎です!