C# 如果引发异常,如何防止UpdatePanel中的Repeater更改值

C# 如果引发异常,如何防止UpdatePanel中的Repeater更改值,c#,asp.net,C#,Asp.net,我正在做一个ASP.NET Web表单项目。我有更新面板,在这个面板中我有中继器,里面有几个嵌套的中继器。因此,我的标记如下所示: <asp:UpdatePanel ID="UpProducts" UpdateMode="Always" runat="server"> <Triggers> <asp:Async

我正在做一个
ASP.NET Web表单
项目。我有
更新面板
,在这个面板中我有
中继器
,里面有几个嵌套的中继器。因此,我的标记如下所示:

          <asp:UpdatePanel ID="UpProducts" 
                     UpdateMode="Always"
                     runat="server">
          <Triggers>
                <asp:AsyncPostBackTrigger ControlID="btnAllocate"/>
          </Triggers>
          <ContentTemplate>
            <asp:Repeater ID="RpUserNameAndProductName" 
                  runat="server">
            <ItemTemplate>
                  ..
                  <asp:Repeater ID="RpProductDescription" 
                         runat="server">
                  <HeaderTemplate>
                     //sonme data
                  </HeaderTemplate>
                  <ItemTemplate>
                    //some data
                 </ItemTemplate>

                 <asp:Repeater ID="AnotherRepeater" 
                         runat="server">
                  <HeaderTemplate>
                     //sonme data
                  </HeaderTemplate>
                  <ItemTemplate>
                    //some data
                 </ItemTemplate>
            </ItemTemplate>
          </ContentTemplate>
          </asp:UpdatePanel>
          <asp:button id="btnAllocate"
              text="Allocate"
              usesubmitbehavior="false"
              onclick="btnAllocate_Click"
              runat="server"/>
所以基本上这就是我困惑的地方。为了计算新值,我需要根据从中继器获取的信息执行DB查询,这样就有了出错的空间。然而,如果第一个
foreach
运行良好,并且从第二个或第三个抛出错误,那么中继器将使用新计算的值进行更新。这是合乎逻辑的,因为我在获取控件的foreach中设置了值


因此,我想做的是,如果我进入
catch
块(抛出一个excation),只是为了阻止更新面板部分更新面板/中继器更新信息。

我承认我可能不完全理解这个问题,但您可能应该将更新逻辑与显示逻辑分开。首先,收集更新所需的所有值,将它们传递给算法(在那里,在事务或其他内容中执行更新),捕获任何异常,并向用户显示当前状态(无论是否更改)。@Pafka如果正确的话。事实上,我一直在考虑做这样的事情,但我很确定一定有另一种方法。我认为是一种解决办法,就是收集旧的值,如果我进入<代码> catch <代码>,块RO将中继器绑定到它们。但这很复杂,如果我有更多的数据来回移动,那将是巨大的时间浪费,因为我希望我的代码不会经常抛出异常:)
     try
     {
        foreach (RepeaterItem item in RpUserNameAndProductName.Items)
        {
            Repeater innerRepeater = (Repeater)item.FindControl("RpProductDescription")
            foreach (RepeaterItem innerItem in innerRepeater.Items)
            { 
              //here I collect the values and calculate/set the empty text box value
              TextBox txtSomeCalculatedBox = (TextBox)innerItem.FindControl("txtCalculated");
              txtSomeCalculatedBox.Text = //here I execute DB query
            }

            Repeater anotherInnerRepeater = (Repeater)item.FindControl("AnotherRepeater")
            foreach (RepeaterItem aInnerItem in anotherInnerRepeater .Items)
            { 
              //here I collect the values and calculate/set the empty text box value
            }
        }
     }    
     catch (Exception ex)
     {
       //How to stop the values from being updated?
     }