Хорошо, у меня есть UserControl. В нем есть текстовое поле и другие подобные вещи, а также кнопка сохранения.
У меня есть этот UserControl в элементе управления Repeater в ItemTemplate.
Теперь, когда я впервые запускаю его, оно работает нормально. Когда я изменяю содержимое текстового поля и сохраняю его, я получаю всевозможные ошибки с нулевой ссылкой.
Самым запутанным является то, что создается впечатление, что он создает новый экземпляр моего класса, но пропускает метод Page_Load
и тому подобное. Это пример моего кода в UserControl
Data.Report ThisReport;
[Browsable(true)]
public int ReportID
{
get;
set;
}
protected void Page_Load(object sender, EventArgs e)
{
if (ReportID == 0)
{
throw new ArgumentException("ReportID can not be 0");
}
var report = Data.Report.SingleOrDefault(x => x.ID==ReportID);
txtName.Text = report.Description;
ThisReport = report;
}
protected void btnSave_Click(object sender, EventArgs e)
{
var x=ThisReport.Foo; //ThisReport == null here.
}
Используется в повторителе так:
<asp:Repeater ID="Repeater1" runat="server" DataSourceID="ReportsData">
<ItemTemplate>
<uc:ReportManager ReportID="<%# ((Data.Report)Container.DataItem).ReportID %>"
runat="server" />
</ItemTemplate>
</asp:Repeater>
Почему, похоже, инициализируется новый экземпляр моего UserControl? Как мне преодолеть эту проблему?