如果这没有任何意义,你将不得不原谅我,因为我仍然非常是ASP.NET新手。
我有一个任意长的项目列表(让我们说它是Person类型的列表),我已经弄清楚如何绑定到转发器控件并显示项目的属性(例如,人的名字)。 / p>
我有兴趣知道的是我如何“组合”部分并知道数据来自服务器端的位置(这可能毫无意义;我会再试一次)。 从下面的代码中,当用户在Person名称旁边点击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){
//?
}
修改
为了澄清,我希望能够从事件处理程序返回到List中相应的Person对象。
答案 0 :(得分:2)
在这种情况下,您将使用LinkButton.CommandArgument属性。您可以使用某些数据为每个LinkButton设置数据,然后在调用按钮事件处理程序时将数据拉出。
答案 1 :(得分:1)
我想我知道你之后的事情,下面的代码将允许你通过点击链接按钮从转发器中删除一个项目。
编辑:为了回应评论,我更改了代码以显示如何将ID传回命令事件。
将您的第一行更改为
<asp:Repeater ID="Queue" runat="server" ItemCommand="rpt_ItemCommand">
以及链接按钮的以下行
<asp:LinkButton id="lbDelete" runat="server" Text="[Delete]" CommandName="delete"></asp:LinkButton>
然后在cs中添加以下内容
要获取转发器项的ID,请使用CommandArgument,在数据绑定期间设置ID。
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
}
}
}
这意味着当您点击转发器中的按钮时,您现在可以在后面的代码中触发此事件。
答案 2 :(得分:0)
根据TheAlbear发布的内容,我在事件处理程序中想出了这个。
public void rpt_ItemCommand(object source, RepeaterCommandEventArgs e) {
Person p = People[e.Item.ItemIndex];
}
我不知道使用索引是否可靠。