gpt4 book ai didi

c# - UpdatePanel 重新加载整个页面

转载 作者:太空宇宙 更新时间:2023-11-03 17:19:00 25 4
gpt4 key购买 nike

我正在构建一个 asp.net cutom 控件,其中有两个下拉列表:companyIdSelection 和 productFamilySelection。我在 Page_Load 处填充 companyIdSelection,以便根据 companyIdSelection 中的所选项目填充 productFamilySelection。我正在使用 UpdatePanels要实现这一点,但出于某种原因,每次我更新 companyIdSelection Page_Load 时都会被调用(据我所知,只有在重新加载整个页面时才会发生这种情况),列表会再次重新加载,用户选择的项目会丢失(所选项目始终是最上面的项目)。这是代码

    <asp:UpdatePanel ID="updateFamilies" 
runat="server"
UpdateMode="Always">
<ContentTemplate>
Company ID:<br>
<br></br>
<asp:DropDownList ID="companyIdSelection"
runat="server"
AutoPostBack="True"
OnSelectedIndexChanged="companyIdSelection_SelectedIndexChanged">
</asp:DropDownList>
<br></br>
Product Family:
<br></br>
<asp:DropDownList ID="productFamilySelection" runat="server"
AutoPostBack="True"
onselectedindexchanged="productFamilySelection_SelectedIndexChanged">
</asp:DropDownList>
<br>
</ContentTemplate>
</asp:UpdatePanel>

protected void Page_Load(object sender, EventArgs e)
{
this.companyIdSelection.DataSource = companyIds(); //companyIds returns the object containing the initial data items
this.companyIdSelection.DataBind();
}

protected void companyIdSelection_SelectedIndexChanged(object sender, EventArgs e)
{
// Page_Load is called again for some reason before this method is called, so it
// resets the companyIdSelection
EngDbService s = new EngDbService();
productFamilySelection.DataSource = s.getProductFamilies(companyIdSelection.Text);
productFamilySelection.DataBind();
}

此外,我尝试将 UpdatePanel 的 UpdateMode 设置为“条件”并添加一个异步回发触发器但结果是一样的。我做错了什么?

附言:我通过在 Page_Load 方法中使用 Page.IsPostBack 解决了更新问题,但我仍然希望尽可能避免完全回发

最佳答案

我认为您误解了 UpdatePanel 的工作原理。他们确实做了一个完整的页面回发,只是在呈现阶段他们只捕获输出的一部分并将其发送回 AJAX 响应,以便可以更新页面。 More info here.

因此您仍然需要在您的 page_load 事件中检查它是否是一个回发,并且只有在它不是一个时才执行您的数据加载。

关于c# - UpdatePanel 重新加载整个页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2593076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com