2

最近、ボタンのクリック時にさまざまなユーザー コントロールをレンダリングする UpdatePanel を単一の Web ページに追加しました。Header.Stylesheet.CreateStyleRule を使用してヘッダーにインライン スタイルを動的に追加するという問題に苦しんでいます。問題は、部分的なポストバックに挿入されず、意味があることです。これは明らかに、部分的なポストバックであり、ページが初めて読み込まれたときにのみヘッダーがレンダリングされるためです。

スタイリングは、データベースからスタイリングを取得する次のメソッドによって追加されています。

Private Sub InitializeStylesheet(ByVal ButtonId As Integer)
    Dim CSSStylesheet As Stylesheet = StyleBackend.GetStylesheets(ButtonId)
    Dim IdClassList As List(Of StyleIDClass) = StyleBackend.GetStylesheetsStyleIDClass(CSSStylesheet.StylesheetID)
    'Iterates through the cssidclass
    For Each cssidClass In IdClassList
        Dim styleItems As List(Of StyleItem) = StyleBackend.GetStyleItemsByIDorClass(cssidClass.StyleIDClassID)
        Dim cssString As String = Nothing
        For Each StyleItem As StyleItem In styleItems
            cssString += StyleItem.Property & ":" & StyleItem.Value & ";"
        Next
        'Iterates all cssitems which belongs to a cssidclass
        Me.Header.StyleSheet.CreateStyleRule(New CustomStyle(cssString), Nothing, cssidClass.ClassOrID)
        Me.Header.ViewStateMode = UI.ViewStateMode.Disabled
    Next
End Sub

私はこれを機能させようとしてお尻をグーグルで調べてきましたが、それは不可能のようです。

このmsdn記事のリテラルは、私がやろうとしていることをすることは不可能だと言っています。 http://msdn.microsoft.com/en-us/library/system.web.ui.htmlcontrols.htmlhead.stylesheet.aspx

非同期ポストバック中にプログラムでスタイルまたはスタイル ルールを追加することはサポートされていません。ASP.NET Web ページに AJAX 機能を追加すると、非同期ポストバックによってページ全体が更新されることなく、ページの領域が更新されます。詳細については、「Microsoft Ajax の概要」を参照してください。

誰かがこれを行うための提案または代替方法を持っていますか?

ありがとうございました!

4

1 に答える 1

0

1 つの解決策は、スタイルを動的に変更するのではなく、メインのスタイルシートに含めることです。それらがデータ駆動型であっても、合計リストが大きすぎない場合は、HTTP ハンドラーを介してメイン ページで出力できます。

あるいは (おそらくもっと効率的に)、スタイル データを文字列としてクライアントに返し、そこで処理することもできます。

クライアント スクリプト マネージャーで EndRequest イベントをリッスンできます。

function endRequest(){
    // look at the updated DOM     
}

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequest);

おそらく次のシーケンスです。

  • 非同期ポストバックを開始する
  • スタイルを内部の非表示フィールドにレンダリングしますUpdatePanel
  • で、 DOMendRequestを調べて、(命名規則、データ属性、または単に ID に基づいて) スタイルが設定された隠しフィールドが含まれているかどうかを確認します。
  • 非表示フィールドから値を取得し、JavaScript を使用してページのスタイル ルールに追加します。
于 2012-12-17T15:58:58.340 に答える