2011-01-29 90 views
1

在我的頁面上,我有一個佔位符,當我在下拉列表中選擇一個項目時,我加載了一個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 2011-01-29 21:12:29

+0

你會怎麼做? – Victor 2011-01-29 21:17:43

0

ASP.NET WebForms使用「回傳」。這意味着只要它處理一個「事件」,比如在選擇列表中選擇一個項目,它就會通過HTTP POST返回到服務器以獲取新的HTML。

這允許它保存頁面的不同版本之間的狀態,但意味着F5將是一個POST,瀏覽器會警告你。

解決此問題的方法是使用POST-then-REDIRECT並自行處理控件的持久性。如果它只有一個控件,例如添加控件,它可以通過檢查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的控件的自動狀態管理。