Я создаю динамическое представление кнопок, которое добавляет кнопки программно в зависимости от количества элементов в базе данных. Понравился простой рабочий процесс. На первой странице вызова обработчик событий работает так, как ожидалось. Новая страница с новым элементом создается и возвращается клиенту. На второй обратной передаче обработчик событий НЕ вызывается, и представление сохраняет те же элементы. Повторное нажатие на ту же кнопку (третий постбэк) приводит к достижению точки останова в обработчике событий.
Моя проблема в том, почему не вызывается обработчик событий, даже если я перестраиваю страницу (переопределяю OnInit ()) в каждом посте обратно?
Для информации: методы LoadViewWithAlphabeticalDatasource()
и LoadViewWithWorkflowItem()
делают то же самое, поэтому я удалил один из них в разделе ниже. События добавляются таким же образом.
Код:
<code><pre>
namespace EPS.Web.View.Article
{
public class DynamicGridView : BasePage, IDynamicGridView
{
protected override void OnInit(EventArgs e)
{
Presenter = new DynamicGridPresenter(this);
if (IsPostBack)
{
if (Presenter.Step smallerthan 2)
{
LoadViewWithAlphabeticalDatasource();
}
else
{
LoadViewWithWorkflowItem();
}
}
}
[PageMethod]
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
SetSubmenuVisible = false;
Presenter.InitView();
PrepareView();
}
AddEvents();
AddLabels();
PageMethodsEngine.InvokeMethod(this);
}
private void Back_Clicked(object sender, EventArgs e)
{
Presenter.StepEngine(DynamicGridPresenter.BACK, string.Empty, string.Empty);
PrepareView();
}
private void Cancel_Clicked(object sender, EventArgs e)
{
Presenter.StepEngine(DynamicGridPresenter.CANCEL, string.Empty, string.Empty);
PrepareView();
}
private void ForwardString(object sender, EventArgs e)
{
Presenter.StepEngine(DynamicGridPresenter.FORWARD, ((LinkButton)sender).CommandArgument, string.Empty);
PrepareView();
}
private void ForwardWorkflowItem(object sender, EventArgs e)
{
Presenter.StepEngine(DynamicGridPresenter.FORWARD, string.Empty, ((LinkButton)sender).CommandArgument);
PrepareView();
}
protected void PrepareView()
{
phDynamicGridView.Controls.Clear();
if (Presenter.Step smallerthan 2)
{
LoadViewWithAlphabeticalDatasource();
}
else
{
LoadViewWithWorkflowItem();
}
}
private void LoadViewWithWorkflowItem()
{
var table = new HtmlTable();
table.Attributes.Add("class", "tableDynamicGrid");
int max = GetRowLength(WODatasource.Count);
int temp = 1;
int actualPosition = 0;
int itr = 1;
var tr = new HtmlTableRow();
if (WODatasource.Count == 0)
{
phDynamicGridView.Controls.Add(new HtmlTable());
return;
}
foreach (WorkflowItem s in WODatasource)
{
if (actualPosition biggerOrEqual MaxLength && temp smallerOrEqual max)
{
table.Rows.Add(tr);
actualPosition = 0;
temp++;
tr = new HtmlTableRow();
}
actualPosition++;
var cell = new HtmlTableCell();
// cell.Attributes.Add("class", "cellDynamicGrid");
var btn = new LinkButton
{
CommandArgument = s.Oid.ToString(),
Text = s.SelectionItem.Name /*, CssClass = "linkButtonDynamicGrid"*/
};
btn.Click += ForwardWorkflowItem;
cell.Controls.Add(btn);
tr.Cells.Add(cell);
if (itr == WODatasource.Count && temp smallerOrEqual max)
{
while (itr biggerOrEqual WODatasource.Count && itr smallerThan max*MaxLength)
{
tr.Cells.Add(new HtmlTableCell());
itr++;
}
table.Rows.Add(tr);
phDynamicGridView.Controls.Add(table);
return;
}
itr++;
}
}
}