You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UpdatePanel中Repeater更新后ViewState存储的ProjectID丢失求助

问题分析与解决办法

核心原因

UpdatePanel的部分回发场景下,ViewState的恢复顺序和控件初始化时机不匹配,导致你的ProjectID在子控件加载时还没从ViewState中正确取出,而全页刷新时生命周期完整,所以能正常读取。

具体修复步骤

1. 调整ViewState恢复逻辑

把ViewState的读取逻辑从分支判断里抽出来,确保每次回发(包括部分回发)都优先从ViewState同步ProjectID,不要只在ProjectID==0时才处理:

protected void Page_Load(object sender, EventArgs e)
{
    // 每次加载都优先从ViewState恢复ProjectID
    if (ViewState["project_id"] != null)
    {
        this.ProjectID = (int)ViewState["project_id"];
    }

    if (!IsPostBack)
    {
        ViewState["project_id"] = this.ProjectID;
        ApplyRowModeValue();
    }
}

2. 确保DropDownList选择时即时更新ViewState

在DropDownList的选择事件里,必须同步更新ProjectID和ViewState,同时触发Repeater的重新绑定:

protected void DropDownList_SelectedIndexChanged(object sender, EventArgs e)
{
    int selectedId = int.Parse(((DropDownList)sender).SelectedValue);
    // 同步更新实例字段和ViewState
    this.ProjectID = selectedId;
    ViewState["project_id"] = selectedId;
    // 重新绑定Repeater,让子控件拿到最新ID
    m_RowRepeater.DataBind();
}

3. 检查UpdatePanel触发器配置

确保DropDownList的选择事件被设置为UpdatePanel的异步触发器,保证选择变化时能触发部分回发并更新Repeater:

<asp:UpdatePanel ID="YourUpdatePanel" runat="server">
    <ContentTemplate>
        <asp:DropDownList ID="YourDropDownList" runat="server" AutoPostBack="true" 
                          OnSelectedIndexChanged="DropDownList_SelectedIndexChanged"></asp:DropDownList>
        <asp:Repeater ID="m_RowRepeater" runat="server">
            <!-- 你的Repeater模板内容 -->
        </asp:Repeater>
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="YourDropDownList" EventName="SelectedIndexChanged" />
    </Triggers>
</asp:UpdatePanel>

4. 自定义控件初始化时机检查

如果FerieRichiestaMonthRow是自定义控件,要确保它在Page_Load之后(比如PreRender阶段)读取ProjectID,避免在ViewState恢复完成前就初始化控件,导致拿到默认的0值。

验证流程

修改后测试:

  1. 选择DropDownList选项,触发部分回发
  2. 查看Repeater中子控件的ProjectID是否为选中的ID
  3. 无需全页刷新即可正常传递ID

内容的提问来源于stack exchange,提问作者And

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 13:22:03