2009-06-30 8 views
6

私は非常に大きな問題があります。 ASP.NET 3.5でCRM(Costumer Relationship Management)システムを作っています私はUpdatePanelトラップにトラップされています

DevExpress.comのコントロールとUpdatePanelsの使用に関する私のプロジェクト全体をベースにしています。

システム全体の中央ページである私のページの1つに、非常に大きな可能性があり、そのために大量のUserControlが含まれています。

私の問題は、UpdatePanelsが更新パネルだけでなくページ全体を再ポストするという事実のため、実際にはとても遅くなっているということです。ポップアップウィンドウが:(

が、私は私の首を壊すことなく離れUpdatePanelsから、このシステム全体をリファクタリングすることができますどのような方法があります表示される前に、私たちはいつか3-4秒を話している? があるとにかく、私はUpdatePanelsの私の使用を最適化することができますか?

ViewStateのも絶対に巨大である。

何かいいアイデアは歓迎されている...

+0

私も何を求めているのでしょうか?UpdatePanelをページ全体ではなく新しいものにする方法がありますか? –

答えて

8

UpdatePanelsを使用してページ全体を掲示周りを取得する方法はありません。ここではアプリを再設計する代わりにカップルの事です私は試してみたい:

  1. 不要なコントロールのviewstateを無効にする
  2. ユーザーコントロールのUpdateMode = "条件付き"を設定します。これはページ全体のポストを回避することはありませんが、レンダリング時間を少し短縮します。特定のUpdatePanelのコンテンツのみがブラウザで更新されます。
  3. ユーザーコントロールのIDが短いことを確認してください。あなたが多くのサーバーコントロールを持っているならば、これらのIDのASP.NET webforms名コントロールがHTMLで制御される方法はかなり繰り返されます。同じようにマスターページのプレースホルダに名前を付ける。ユーザーコントロールとプレースホルダの名前を変更して、大きなページを半分に減らしました。あなたはつまり、サーバーへのアクションのために必要とされるのみデータを送信し、必要な唯一の何バックを取得し、呼び出し、実際のAJAXを使用して、更新パネルに含まれるポストバックの一部を交換する必要があります
+0

LOL私は命名問題を考慮しませんでしたが、確かにそこにあります。はい、彼らはたくさん繰り返されますが、私は特定の名前ではないことが嫌いです...今はもっと遅いローディングを嫌うかどうか検討しなければなりません.. –

+0

これを明確にしたいと思うかもしれません: "特定のユーザーコントロールのみが画面上で更新されます。"それはおそらく "特定のUpdatePanelのみ..."でなければなりません。また、ページ全体ではなく、必要なパネルだけがクライアントに送信されることに注意してください。 –

+0

+1短いIDです。要求を半分実現するために私のページを最適化している間、非常にイライラしています。masterpage_page_form_usercontrol_nestedusercontrol_gridview_labelなどなど –

0

ポストバックとUpdatePanelsを取り除く、ビューを更新する。

(私は「アクション」と「ビュー」という用語を使用していることに気づくでしょう)はい、私はMVCファンです。あなたがいる状況は、WebFormsとASP .NET AJAXコントロール)。

+0

ブロック上に新しい子供がいるのは簡単です:)どちらのフレームワークでも面倒なコードを書くのは簡単です。 – kervin

+0

はい、間違いありません。 WebFormsの問題は、「Hello World」ページがすでに乱雑に見えることです。 –

0
  • 私は何かが不足しているはずです。更新パネルがページ全体を再読み込みしているのはなぜですか?更新パネルのポイントは、そのパネルにあるものだけをリフレッシュすることですね。ありがとうございます。私は、私が考えているように、ページを再ポストし、パネルを再描画しないことを話していると思います。

  • 特にグリッドの場合は、ViewStateをオフにしてみてください。

  • あなたのページではどのようなコントロールが最も一般的ですか?あなたはDevExpress社のユーザーだので、ViewStateのかControlStateを
+1

UpdatePanelsはパネル内のコンテンツのみを更新しますが、ページライフサイクル全体が実行されます。つまり、すべてのコントロールのviewstateがサーバーとの間で送受信されます。 –

+0

ありがとうございます。だからそれは本当にViewStateの問題です。 ViewState/ControlStateはバグです:)可能な限り、私はそれらを無効にします。 – kervin

2

を使用しない独自の軽量ユーザーコントロールまたはサーバーコントロールを有するものを交換してみてください、あなたは学ぶために少し時間を割いて検討するかもしれない彼らの非同期操作を行うことができますCallbackPanel UpdatePanelのオーバーヘッドなしで処理することができます。

代わりに(私が間違っている場合、誰かが私を修正してください)が、ポストバックのすべては(UpdatePanelの中​​にIE)非同期である場合、ページ全体のViewStateを無効にするには、理論的には可能ではないでしょう(中ページディレクティブ)に悪影響を及ぼすことはありませんか?コースから完全にテストしなければならないでしょうが、それは価値があります。

+0

私はこれを試してみましょう、これまでのところ最高の提案です。 –

0

私がクライアント側のViewstateデータを取り除く方法に関する解決策を追加したいと思います。それはサーバーに余分な負荷を与えますが、あなたが私と同じ状況にあり、多くのサーバーのパワーを持ち、クライアントサイドの負荷を取り除く必要がある場合、これはうれしいことです。

よう

作品...すべてのページが今、あなたの代わりにあなたのコード内のビューステートのビューステートデータセッションへの鍵を持っているこの

public class BasePage : System.Web.UI.Page 
{ 
    protected override void SavePageStateToPersistenceMedium(object viewState) 
    { 
     string vsKey = String.Format("VIEWSTATE_{0}_{1}_{2}", base.Session.SessionID, Request.RawUrl, DateTime.Now); 
     Session.Add(vsKey, viewState); 
     ClientScript.RegisterHiddenField("__VIEWSTATE_KEY", vsKey); 
    } 

    protected override object LoadPageStateFromPersistenceMedium() 
    { 
     string vsKey = Request.Form["__VIEWSTATE_KEY"]; 
     return Session[vsKey]; 
    } 
} 

のように見えるBasePage.csから派生してみましょう毎日1000-1200人の訪問者がいるウェブサイトで私の魅力を味わってください。

関連する問題