Когда вы используете UpdatePanel
, вы можете обновлять содержимое на панели только во время асинхронной обратной передачи, инициированной с этой панели, поэтому ваше сообщение об ошибке должно появиться где-то в пределах UpdatePanel
. (То есть, если вы не установите UpdateMode="Always"
для одного из UpdatePanels
, его содержимое будет обновляться при каждой асинхронной и полной обратной передаче. Но это не поможет вам, если вы не поместите свое сообщение об ошибке в собственное UpdatePanel
с UpdateMode="Always"
, что потребует от вас добавления UpdatePanel
к каждой странице. Я понимаю, что не , что вы хотите сделать.)
Следующий пример будет работать, чтобы добавить сообщение об ошибке вверху UpdatePanel
.
Вам потребуется добавить параметр Control errorParent
в ваш метод Error
, чтобы он мог добавить сообщение об ошибке в качестве дочернего элемента управления для этого родительского элемента управления.
В вашем блоке catch
просто передайте любой контейнерный элемент управления, где вы хотите, чтобы появилось сообщение об ошибке. Этот элемент управления должен быть контейнером для принятия дочерних элементов управления, поэтому он должен быть представлен в виде тега <div>
или <span>
, например asp:Panel
или asp:UpdatePanel
.
.
В приведенном ниже примере вы можете использовать errorParent.Controls.Add(errorControl)
, чтобы показать сообщение об ошибке внизу UpdatePanel
, или использовать AddAt()
с другим индексом. Просто убедитесь, что индекс будет работать на каждой странице.
Возьмите родительский элемент управления и добавьте новый Literal
дочерний элемент управления:
public string Error(Exception pException, string pFriendlyMessage, Control errorParent)
{
using (BusError erro = new BusError())
{
int? errorId = //HERE Routine to log the error;
Literal errorControl = new Literal();
errorControl.Text = String.Format("<div class=\"errorMain\"><p>{0}</p><small>Event Tracker: {1}</small></div>", pFriendlyMessage, errorId);
errorParent.Controls.AddAt(0, errorControl);
}
}
Передача в родительский контроль:
private void LoadData()
{
try
{
//Loading some data here.
}
catch (Exception ex)
{
Error(ex, "Unexpected error trying to load data.", MyUpdatePanel.ContentTemplateContainer);
}
}