2011-01-29 12 views
1

私のページには、ドロップダウンリストで項目を選択するときにusercontrolをロードするプレースホルダがあります。実行時にusercontrolを読み込んでページを再ロード

protected void ddlLoadCtr_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    Control userControl = LoadControl("../AleSettings1.ascx");  
    plchldSettingsControl.Controls.Add(userControl); 
} 

ユーザーコントロールが描画された後、私はF5(IE)を押すと、私はIEが情報を再送信する必要がIEの警告ウィンドウを取得します....
は、どのように私はそれを防ぐことができますし、なぜそれが起こるのでしょうか?

UPDATE:

たぶん、別のアプローチがありますか? ユーザーがドロップダウンリストから特定のコントロールを選択したときに、特定のコントロール(そのマークアップ付き)をロードします。
ポストバックが行われた場合、コントロールは消えません(ドロップダウンリストから別のコントロールが選択されている場合のみ)

すべてが内部の更新パネルです!

答えて

0

これは、リフレッシュを実行すると、サーバーへの最後の要求を再送信するために発生します。この場合、ドロップダウンでインデックスを変更するイベントです。 ブラウザが要求しないようにすることはできません。

+0

私は何もできません。 (おそらくページを初期状態に戻す) – urker

+0

あなたはどうしますか? – Victor

+0

私は知らない、これは私が尋ねる理由。 – urker

0

ASP.NET WebFormsでは「ポストバック」が使用されています。つまり、選択リスト内のアイテムを選択するなどの「イベント」を処理するたびに、新しいHTMLを取得するためにサーバーにHTTP POSTを返します。

これにより、異なるバージョンのページ間で状態を保存できますが、F5はブラウザが警告するPOSTになります。

POST-then-REDIRECTを使用してコントロールの永続性を処理する方法です。コントロールが1つだけの場合、たとえばコントロールを追加し、それはあなたがコントロールをロードする必要があるかどうかを確認するためにPage_Loadでクエリ文字列をチェックすることによって行うことができます。

protected void Page_Load(object sender, EventArgs e) 
{ 
    if Request.QueryString["ddlLoadCtr"] = "1": 
    plchldSettingsControl.Controls.Add(LoadControl("../AleSettings1.ascx")); 
} 

して、代わりにポストバックを使用しての裏ページにリダイレクト:

protected void ddlLoadCtr_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    var newUrl = Request.RawUrl + "?ddlLoadCtr=1"; 
    Response.Redirect(newUrl); 
} 

クエリパラメータ以外の状態を保存するその他の方法には、Cookieとセッション変数が含まれます。これらはブックマークできないという欠点があります。

いずれの場合でも、これはASP.NETのコントロールの自動状態管理を使用しないことを意味します。

+0

それは私が欲しいものではありません、私はF5キーを押すと、コントロールをロードしたくないです。また、ページ上の他のコントロールがポストバックを引き起こす場合は、コントロールに影響を与えるべきではありません(コントロールが既にロードされている場合は、そのまま)。また、私Response.Redirect(newUrl);すべての私のコントロールの状態は消えた – urker

+0

p.s.私もupdatepanelですべてをラップしました – urker

+0

私はコントロール状態がなくなった理由について説明しました。リダイレクトを使うということはあなた自身が状態を管理することを意味します。そうでなければ、あなたが探しているものではありません。また、リフレッシュ時にブラウザの警告が表示されることもあります。 – orip

関連する問題