C# UpdatePanel.Update()命令生成一个完整的页面加载
我有一个更新面板内的用户控件,我在我的网站上使用2页 两个页面使用相同的母版页,ScriptManger在母版页中声明。 两个页面对UC的调用方式相同:C# UpdatePanel.Update()命令生成一个完整的页面加载,c#,asp.net,C#,Asp.net,我有一个更新面板内的用户控件,我在我的网站上使用2页 两个页面使用相同的母版页,ScriptManger在母版页中声明。 两个页面对UC的调用方式相同: <uc:SearchCube runat="server" ID="searchCube" /> 更新面板设置如下: <asp:UpdatePanel ID="SearchOptions" runat="server" UpdateMode="Conditional" hildrenAsTriggers="true"/&g
<uc:SearchCube runat="server" ID="searchCube" />
更新面板设置如下:
<asp:UpdatePanel ID="SearchOptions" runat="server" UpdateMode="Conditional"
hildrenAsTriggers="true"/>
每个单选按钮的设置如下:
<asp:RadioButton ID="RadioButton1" GroupName="SearchCategory" runat="server"
AutoPostBack="true" OnCheckedChanged="SearchCategoryChanged" Text="Text"/>
我在每个单选按钮控制器上都有一个AsyncPostBackTrigger
我遇到的问题是,在一个页面上,当我调用Update()
函数时,面板会被更新,并且会触发page\u Load
,这会导致UC刷新并重新加载UC的默认设置
在调试模式下,我可以看到工作页面上的Update()
不会生成page\u Load
有人能给我解释一下为什么会发生这种情况吗?每次请求到达服务器时,它都会执行
页面加载
事件。
您需要做的是确保在所有页面上都有回发验证:
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.
}
}
如果在页面加载
和SearchCategoryChanged
方法中放置一些断点,您将能够看到管道的外观。修复了我的问题。
有问题的页面是一个索引页面,其中包含一些参数。
我在页面上有一个Response.Redirect(),以避免重复页面。
显然,当PostBack()被创建时,它在没有任何参数的情况下调用该页面,我强制将其重定向到默认视图,因为没有向该页面发送任何参数
我在一个Microsoft帮助论坛中发现了导致我的问题的线索,其中指出:
通过直接调用Response.Write(),您绕过了正常的
ASP.NET控件的呈现机制。你写的东西都快用完了
直接交给客户,无需进一步处理(嗯,
主要是。这意味着UpdatePanel无法在其
特殊格式
无论如何,页面每次都在重新加载,这导致它用默认值重新加载用户控件。您的单选按钮已经在进行部分回发,为什么还要调用UpdatePanel.Update?因为我需要刷新视图。嘿,Gabriel,谢谢您的评论。我确实进行了回发验证,我可以看到,一开始页面加载是在更改时执行的,但我面临的问题是,在页面加载和Update()函数发生后,另一个页面加载出现IsPostBack=FALSE。您所有的控件都在
UpdatePanel
中吗?我是说单选按钮和你的用户控件?执行回发的控件和正在修改的控件需要放入UpdatePanel.Yes。正如我在这里已经写过的,UC在一个页面上工作得很好,但在另一个页面上却没有。
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.
}
}