Привязка объекта к элементу управления
Вы должны простить меня, если это не имеет смысла, так как я все еще очень новичок в ASP.NET.
У меня есть произвольно длинный список элементов (допустим, это список типа Person), который я выяснил, как привязать к элементу управления repeater и отобразить свойства элемента (например. имя человека).
Что меня интересует, так это то, как я могу "комбинировать" разделы и знать, откуда берутся данные на стороне сервера (это, вероятно, не имеет смысла; я попробую снова).
Из кода ниже, когда пользователь нажимает кнопку LinkButton рядом с именем человека, HelloHandler будет запущен. Но как я могу узнать , чье имя было логически связано с этой ссылкой на странице? Как я могу "узнать" их имя?
Aspx
<asp:Repeater ID="Queue" runat="server">
<ItemTemplate>
<div>
<%# Eval("Name") %><br />
<asp:LinkButton runat="server" Text="Say Hello" OnClick="HelloHandler"></asp:LinkButton>
</div>
</ItemTemplate>
</asp:Repeater>
Cs
public List<Person> People = new List<Person>();
protected void Page_Load(object sender, EventArgs e){
People.Add(new Person("Albert"));
People.Add(new Person("Bradley"));
People.Add(new Person("Chad"));
//etc...
Queue.DataSource = People;
Queue.DataBind();
}
public void HelloHandler(object sender, EventArgs e){
//?
}
Edit
Для уточнения я хочу иметь возможность вернуться к соответствующему объекту Person в списке из обработчика событий.
3 ответов:
Я думаю, что знаю, что вы после, код ниже позволит вам удалить элемент из ретранслятора от нажатия кнопки ссылки.
EDIT: в ответ на комментарий я изменил код, чтобы показать, как передать идентификатор обратно в событие команды.
Измените верхнюю строку на
<asp:Repeater ID="Queue" runat="server" ItemCommand="rpt_ItemCommand">И следующая строка к вашей кнопке ссылки
<asp:LinkButton id="lbDelete" runat="server" Text="[Delete]" CommandName="delete"></asp:LinkButton>Затем добавьте следующее в свой cs
Чтобы получить идентификатор элемента repeater, вы CommandArgument, установите идентификатор во время привязки данных.
protected void rep_ItemDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item) { var lbDelete = (LinkButton)e.Item.FindControl("lbDelete"); lbDelete.CommandArgument = retailItem.Id.ToString(); } } protected void rpt_ItemCommand(object source, RepeaterCommandEventArgs e) { if (e.CommandName == "delete") { LinkButton btn = e.CommandSource as LinkButton; if (btn != null) { var itemID = (string)e.CommandArgument; //Do Stuff } } }Это будет означать, что теперь у вас есть этот пожар события в коде позади, когда вы нажимаете кнопку в повторителе..
В такой ситуации вы бы использовали кнопку LinkButton.CommandArgument свойство. Вы можете задать данные для каждой кнопки LinkButton с некоторыми данными, а затем извлечь эти данные при вызове обработчика событий button.
Основываясь на том, что написал TheAlbear, я придумал это в обработчике событий.
public void rpt_ItemCommand(object source, RepeaterCommandEventArgs e) { Person p = People[e.Item.ItemIndex]; }Я не знаю, является ли использование индекса надежным.
Comments