如果抛出异常,如何防止UpdatePanel中的Repeater更改值

时间:2014-10-09 06:23:35

标签: c# asp.net

我正在进行ASP.NET Web Forms项目。我有Update Panel,在此面板中,我有Repeater,里面有几个嵌套的转发器。所以我的标记看起来像这样:

          <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"/>

有点令人困惑的标记可能但是我的想法是,当我点击btnAllocate时,我想从嵌套转发器的某些文本框中获取值,我从数据库开始填充,然后根据它们的值计算并设置最初为空的另一个文本框的值,直到用户决定他希望系统为他进行分配。

因此,当我在代码中输入btnAllocate_Click事件后,我有:

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

所以基本上这就是我感到困惑的地方。为了计算新值,我需要根据我从Repeater获取的信息执行数据库查询,以便有错误的余地。但是,如果第一个foreach进展顺利且错误从第二个或第三个引发,依此类推,则使用新计算的值更新转发器。这是合乎逻辑的,因为我在foreach中设置了值,我得到了控件。

所以我想要做的是,如果我进入catch块(抛出一个激活)只是为了阻止更新面板部分更新面板/转发器更新信息。

0 个答案:

没有答案