Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将对象绑定到控件_C#_Asp.net_Postback_Repeater - Fatal编程技术网

C# 将对象绑定到控件

C# 将对象绑定到控件,c#,asp.net,postback,repeater,C#,Asp.net,Postback,Repeater,如果这毫无意义,你必须原谅我,因为我对ASP.NET还是很陌生 我有一个任意长的项目列表(假设它是Person类型的列表),我已经知道如何绑定到repeater控件并显示项目的属性(例如Person的名称) 我感兴趣的是如何“组合”部分,并知道数据从服务器端的何处起源(这可能没有意义;我会再试一次)。 根据下面的代码,当用户点击姓名旁边的链接按钮时,HelloHandler将运行。但是我怎么知道链接在页面上与谁的名字有逻辑关联呢?我怎样才能“得到”他们的名字 aspx <asp:Repea

如果这毫无意义,你必须原谅我,因为我对ASP.NET还是很陌生

我有一个任意长的项目列表(假设它是Person类型的列表),我已经知道如何绑定到repeater控件并显示项目的属性(例如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){
 //?
}
public List People=new List();
受保护的无效页面加载(对象发送方、事件参数e){
人员。添加(新人员(“Albert”);
人物。添加(新人物(“布拉德利”);
人员。添加(新人员(“乍得”);
//等等。。。
Queue.DataSource=人;
Queue.DataBind();
}
公共无效HelloHandler(对象发送方,事件参数e){
//?
}
编辑


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

在这种情况下,您可以使用该属性。您可以使用一些数据设置每个LinkButton的数据,然后在调用button事件处理程序时提取这些数据

我想我知道你想要什么,下面的代码将允许你通过点击链接按钮从中继器中删除一个项目

public void rpt_ItemCommand(object source, RepeaterCommandEventArgs e) {
    Person p = People[e.Item.ItemIndex];
}
编辑:为了响应注释,我更改了代码,以显示如何将ID传递回命令事件

将顶行更改为

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

这意味着,当您单击中继器中的按钮时,代码中现在会触发此事件

根据TheAlbear发布的内容,我在事件处理程序中提出了这一点

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

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

我可能给出了一个不好的例子。当我说我想要名字的时候,我的意思是我想要列表中的整个Person对象。我试过了,但是我需要返回到列表中对象的引用。不过,我确实根据你的想法想出了一个解决方案。我现在就发布它。现在的答案显示了如何将项目ID传递回代码behindIndex并不是一个真正可靠的源代码,我已经更改了答案以显示如何传递项目ID。
public void rpt_ItemCommand(object source, RepeaterCommandEventArgs e) {
    Person p = People[e.Item.ItemIndex];
}