Заменить пользовательские элементы управления на сбой - PullRequest
1 голос
/ 09 ноября 2009

Недавно у меня был пользовательский элемент управления, который я разрабатывал, бросил исключение. Я знаю, что послужило причиной исключения, но эта проблема заставила меня задуматься. Если у меня есть пользовательский элемент управления, по какой-либо причине выдается исключение, и я хочу заменить этот пользовательский элемент управления на что-то другое (например, сообщение об ошибке «Извините, эта часть страницы не работает») и, возможно, зарегистрировать ошибку хороший способ сделать это, что можно сделать независимо от того, что пользовательский элемент управления делает или делает (т.е. я не говорю, что пользовательский элемент управления делает / является, потому что я хочу получить ответ, где это не имеет значения).

Пример кода:

<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 голосов
/ 29 апреля 2010

Здесь работают две вещи:

  1. Перехват ошибки
  2. Замена в элементе управления "ошибка"

Поймать ошибку довольно просто. Все сводится к тому, чтобы попытаться ... поймать код, который может вызвать ошибку.

Что касается замены в контроле ошибок (в блоке catch), есть несколько способов сделать это.

  1. У вас может быть скрытый заполнитель в вашем элементе управления, который вы просто отображаете, который говорит: «произошла ошибка». Таким образом, вы не удаляете плохой элемент управления, просто заменяете то, что он говорит.
  2. У каждого элемента управления есть «Родитель», который имеет коллекцию «Элементы управления» (частью которой будет текущий элемент управления). Таким образом, вы можете перебрать коллекцию Parent.Controls, чтобы найти текущий элемент управления, затем выполнить «Parent.AddAt (index, myErrorControl)», чтобы вставить элемент управления ошибкой, затем удалить текущий элемент управления (или просто установить для него «Visible = false»). ).
0 голосов
/ 09 ноября 2009

Общий идентификатор: для ASP.NET он может работать (не уверен насчет ASP)

Перед рендерингом каждого элемента управления - запишите его идентификатор.

String CtrlID;

перед каждым контролем:

CtrlID = control.name

положить все в try / catch (или сделать это для каждого элемента управления)

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

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...