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