Я пишу шаблон элемента для повторителя в отдельном элементе управления, а затем использую следующий код:
HospitalRepeater.DataSource = LocationsList;
HospitalRepeater.ItemTemplate = Page.LoadTemplate("~/UserControls/HospitalDetails.ascx");
HospitalRepeater.DataBind();
Этот код работал нормально, однако теперь мы хотим добавить пользовательские события в элемент управления HospitalDetails.
Мы создали следующее событие с пользовательскими аргументами события:
public class HospitalItemEventArgs : EventArgs
{
public Int32 HospitalID { get; set; }
public HospitalItemEventArgs() { }
public HospitalItemEventArgs(Int32 hID)
{
this.HospitalID = hID;
}
}
public event EventHandler<HospitalItemEventArgs> HospitalAction;
protected virtual void OnHospitalAction(HospitalItemEventArgs e)
{
if (HospitalAction!= null)
this.HospitalAction(this, e);
}
Теперь возникает проблема - я не могу получить доступ к этому пользовательскому событию из своего кода после загрузки этого элемента управления в качестве шаблона, поскольку он возвращает объект System.Web.UI.ITemplate.
Я предположил, что это обертка выше моего точного контроля, но это предположение неверно.
Сбой приведения к моему типу управления со следующим сообщением об ошибке:
Unable to cast object of type 'SimpleTemplate' to type 'UserControls.HospitalDetails'.
Я пробовал обратное действие - управление нагрузкой с использованием
Page.LoadControl("~/UserControls/HospitalDetails.ascx");
Возвращает объект правильного типа HospitalDetails, но не реализует интерфейс ITemplate.
Когда я пытался это сделать, я получил сообщение об ошибке:
Unable to cast object of type 'ASP.usercontrols_hospitaldetails_ascx' to type 'System.Web.UI.ITemplate'.
Может ли кто-нибудь помочь мне разобраться с этим составом или найти другое решение, которое соответствует следующим требованиям:
- Повторитель должен быть привязан к списку HospitalItems для отображения деталей.
- Шаблон для отображения деталей должен скрывать взаимодействие с пользовательским интерфейсом и отображать несколько простых событий, таких как HospitalAction с идентификатором больницы.
- Отдельный объект должен иметь возможность подписываться на эти события.