失败时替代用户控制

时间:2009-11-09 20:47:30

标签: c# asp.net user-controls

最近,我有一个用户控件我正在开发抛出异常。我知道造成这种异常的原因,但这个问题让我思考。如果我有一个用户控件因任何原因抛出一个异常,我希望用其他东西替换那个usercontrol(例如一个错误说“对不起,这部分页面坏了。”)并且可能记录错误,会是什么这样做的好方法可以独立于用户控制或做什么(即我不是说用户控件做什么/是什么,因为我想要一个无关紧要的答案)。

代码示例:

<asp:TableRow VerticalAlign="Top" HorizontalAlign="Left">
    <asp:TableCell>
        <UR:MyUserControl ID="MyUserControl3" runat="server" FormatString="<%$ AppSettings:RVUC %>"
            ConnectionString="<%$ ConnectionStrings:WPDBC %>" Title="CO" />
    </asp:TableCell>
    <asp:TableCell>
        <UR:MyUserControl ID="MyUserControl4" runat="server" FormatString="<%$ AppSettings:RVUA %>"
            ConnectionString="<%$ ConnectionStrings:WPDBA %>" Title="IEAO" />
    </asp:TableCell>
</asp:TableRow>

2 个答案:

答案 0 :(得分:0)

这里有两件事可以解决:

  1. 捕获错误
  2. 换入“错误”控件
  3. 捕捉错误是非常直截了当的。它归结为尝试...抓住可能会引发错误的代码。

    至于错误控制中的交换(在catch块中),有几种方法可以做到。

    1. 您可以在控件中显示一个隐藏的占位符,只显示“发生了错误”。所以,你不是删除坏控件,只是替换它所说的内容。
    2. 每个控件都有一个“Parent”,它有一个“Controls”集合(当前控件将成为其中的一部分)。因此,您可以迭代Parent.Controls集合以查找当前控件,然后执行“Parent.AddAt(index,myErrorControl)”以插入错误控件,然后删除当前控件(或者只是在其上设置“Visible = false”) )。

答案 1 :(得分:-1)

通用ID:对于ASP.NET,它可能有效(不确定ASP)

在渲染每个控件之前 - 记录它的id。

String CtrlID;

每个控件之前:

CtrlID = control.name

将所有内容放入try / catch(或对每个控件执行)

catch (Exception EX)
{
  hide(ctrlId)  (either set visible=false, or whatever suits you)
  show(error message)

}