0

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に手動で追加されます)

どんな助け/指示も大歓迎です!

4

1 に答える 1

0

申し訳ありませんが、私はそれを理解しました。私はしばらく前からコピーして貼り付けた.js参照を使用していましたが、それ以降変更されていました。したがって、問題が発生します。

上記のコードは、開発の容易さを犠牲にすることなく簡単にパフォーマンスを向上させることに関心がある場合に機能します。

于 2010-02-26T14:11:03.177 に答える