2011-01-29 89 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的控件的自动状态管理。