2011-06-07 113 views
2

如果没有任何意义,您将不得不原谅我,因为我仍然是非常新的ASP.NET的。我有一个任意长的物品列表(假设它是一个Person类型的列表),我已经想出了如何绑定到一个Repeater控件并显示物品的属性(例如人物的名字)。将对象绑定到控件上

我很想知道的是,我可以怎样“结合”各个部分,并知道数据从服务器端返回的位置(可能没有意义,我会再试一次)。 从下面的代码中,当用户点击一个LinkBut​​ton和一个Person的名字时,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){ 
//? 
} 

编辑

为了澄清,我希望能够回到相应的Person对象的列表来自事件处理程序。

回答

1

我想我知道你后,下面的代码将允许您从点击一个链接按钮从中继器删除项目。

编辑:作为对评论的回应,我更改了代码以显示如何将ID传递回命令事件。

您的顶线更改为

<asp:Repeater ID="Queue" runat="server" ItemCommand="rpt_ItemCommand"> 

和下面一行到你的链接按钮

<asp:LinkButton id="lbDelete" runat="server" Text="[Delete]" CommandName="delete"></asp:LinkButton> 

然后添加以下在你的CS

为了得到repeater项目的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 
      } 
     } 
} 

这将意味着当您单击转发按钮,你现在在代码这一事件背后的火..

+0

我试过了,但我需要引用回到列表中的对象。我确实想出了一个基于你在那里的解决方案。我现在将它发布。 – daniel 2011-06-07 18:02:11

+0

现在的答案显示如何将物品ID传递回代码 – TheAlbear 2011-08-01 10:25:03

2

在这种情况下,您将使用LinkButton.CommandArgument属性。您可以使用某些数据为每个LinkBut​​ton设置数据,然后在调用按钮事件处理程序时将该数据拉出。

+0

我可能给出了一个不好的例子。当我说我想要这个名字时,我的意思是我想要列表中的整个Person对象。 – daniel 2011-06-07 18:00:47

0

基于什么TheAlbear公布,我在事件处理程序想出了这个。

public void rpt_ItemCommand(object source, RepeaterCommandEventArgs e) { 
    Person p = People[e.Item.ItemIndex]; 
} 

我不知道使用索引是否可靠。

+0

索引并非真正可靠的来源,我已更改我的答案以显示如何传递物品ID。 – TheAlbear 2011-06-09 13:14:37