Вот простое решение:
Оберните шаблон элемента для повторителя в элемент управления.Элемент управления будет иметь ту же разметку, что и шаблон вашего элемента без привязок:
Элемент управления Разметка:
<div>
<asp:LinkButton ID="LnkBtnSort" runat="server" Text="Sort" OnClick="LnkBtnSort_Clicked"/>
</div>
Код управления:
public class SomeControl
{
public event EventHandler Click;
public string ArrangeById
{
set { ViewState["byid"] = value; }
get { return ViewState["byid"].ToString(); }
}
public string Value
{
set { ViewState["val"] = value; }
get { return ViewState["val"].ToString(); }
}
protected void LnkBtnSort_Clicked(object sender, EventArgs e)
{
if( Click != null )
{
this.Click(this, EventArgs.Empty);
}
}
}
Итак, теперь в повторителевсе, что вам нужно сделать, это привязать экземпляр этого элемента управления к Container.DataItem:
<ItemTemplate>
<ctrl:SomeControl
ID="someControl"
runat="server"
OnClick="SomeControl_Clicked"
ArrangeById='<%# Eval("arrange_by_id") %>'
Value='<%# Eval("value") %>' />
</ItemTemplate>
Страница / элемент управления с ретранслятором будет иметь один простой метод:
protected void SomeControl_Clicked(object sender, EventArgs e)
{
//Here cast the sender to the type of control you made:
SomeControl ctrl = (SomeControl)sender;
string byId = ctrl.ArrangeById;
string val = ctrl.Value;
}
Примечание: этот код может быть не на 100% правильным, но он иллюстрирует суть.Процесс прост - элемент управления связывает свои общедоступные свойства с тем, что вам нужно связать.При нажатии на ссылку (внутри вашего элемента управления) элемент управления не передает это событие на страницу.Вместо этого он запускает свое собственное событие (Click), отправляя на страницу сигнал о том, что событие произошло.однако, делая это, он меняет источник события на себя вместо фактической кнопки ссылки.Страница обрабатывает событие, и все довольны.
Таким образом, вам не нужно заботиться о том, что такое CommandArgument ... Если он пуст, это означает, что любой ваш источник данных пуст ...или что-то еще произошло в коде.