C# UpdatePanel.Update()命令生成一个完整的页面加载

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

我有一个更新面板内的用户控件,我在我的网站上使用2页 两个页面使用相同的母版页,ScriptManger在母版页中声明。 两个页面对UC的调用方式相同:

<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.
    }
}