我在用户控件中有一个更新面板,我在我的网站上使用2页 两个页面都使用相同的MasterPage,ScriptManger在MasterPage中声明。 两个页面都以相同的方式调用UC:
<uc:SearchCube runat="server" ID="searchCube" />
在“更新”面板中,我有许多正在更改的RadioButton生成服务器端事件,该事件在更新面板中填充下拉列表并更新面板
protected void SearchCategoryChanged(object sender, EventArgs e)
{
FillDropdowns();
SearchOptions.Update();
}
更新面板设置如下:
<asp:UpdatePanel ID="SearchOptions" runat="server" UpdateMode="Conditional"
hildrenAsTriggers="true"/>
每个RadioButton都设置如下:
<asp:RadioButton ID="RadioButton1" GroupName="SearchCategory" runat="server"
AutoPostBack="true" OnCheckedChanged="SearchCategoryChanged" Text="Text"/>
我在每个单选按钮控制器上也有一个AsyncPostBackTrigger
我遇到的问题是,当我调用Update()
函数时,在一个页面上更新面板并触发Page_Load
,这会导致UC刷新并重新加载UC的默认设置
我可以在DEBUG模式中看到,在工作页面Update()
上不会生成Page_Load
。
任何人都可以向我解释为什么会这样吗?
答案 0 :(得分:0)
每次请求进入服务器时,它都会执行Page_Load
事件。
您需要做的是确保在所有页面上都进行PostBack验证:
protectec void Page_Load(object sender, EventArgs e)
{
if(!Page.IsPostBack)
{
//Not a postBack: Normal page load
//Init your page here
}
else
{
//It's a PostBack (from a command).
//Do nothing or init stuff your all your commands.
}
}
如果您在Page Load
和SearchCategoryChanged
方法中添加了一些断点,您将能够看到管道的外观。
答案 1 :(得分:0)
解决了我的问题。 有问题的页面是一个索引页面,其中包含一些参数。 我在页面上有一个Response.Redirect(),以避免重复页面。 显然,当发布PostBack()时,它调用没有任何参数的页面,我强迫它被重定向到默认视图,因为没有参数被发送到页面。
我在Microsoft帮助论坛中找到了导致我的问题:
通过直接调用Response.Write(),您可以绕过正常情况 ASP.NET控件的渲染机制。你写的那些东西都要去了 没有进一步处理就直接发给客户(好吧, 大多...)。这意味着UpdatePanel无法对其中的数据进行编码 特殊格式。
无论如何,每次重新加载页面都会导致它重新加载用户控件的默认值。