UpdatePanel.Update()命令生成完整的Page_load

时间:2013-09-22 10:34:38

标签: c# asp.net

我在用户控件中有一个更新面板,我在我的网站上使用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

任何人都可以向我解释为什么会这样吗?

2 个答案:

答案 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 LoadSearchCategoryChanged方法中添加了一些断点,您将能够看到管道的外观。

答案 1 :(得分:0)

解决了我的问题。 有问题的页面是一个索引页面,其中包含一些参数。 我在页面上有一个Response.Redirect(),以避免重复页面。 显然,当发布PostBack()时,它调用没有任何参数的页面,我强迫它被重定向到默认视图,因为没有参数被发送到页面。

我在Microsoft帮助论坛中找到了导致我的问题:

  

通过直接调用Response.Write(),您可以绕过正常情况   ASP.NET控件的渲染机制。你写的那些东西都要去了   没有进一步处理就直接发给客户(好吧,   大多...)。这意味着UpdatePanel无法对其中的数据进行编码   特殊格式。

无论如何,每次重新加载页面都会导致它重新加载用户控件的默认值。