我在页面和每个手风琴分支中定义了一个AJAX Accordion控件我有一个从SQL数据库中获取其值的标签
<cc1:Accordion DataSourceID="sqlDSSomeGroup" ID="acrd" runat="server"
<ContentTemplate>
<asp:Label ID="lbl" runat="server" Text='<%#Eval("SomeGroupID") %>' />
</ContentTemplate>
</cc1:Accordion>
标签显示正确的值。我的问题是如何使用FindControl获取代码中的标签值。现在,以下内容正确找到了Accordion。
Dim acc As AjaxControlToolkit.Accordion = CType(placeHolder.FindControl("acrd"), AjaxControlToolkit.Accordion)
但是当我试图使用以下内容获取标签的值时,我只得到第一个手风琴被选中的值,即使选择了不同的手风琴分支。我知道我必须以某种方式在某处使用选定的索引,但我不知道在哪里以及如何。任何帮助将不胜感激?
Dim IDinCodeBehind As Label
IDinCodeBehind = CType(acc.FindControl("lbl"), Label)
答案 0 :(得分:1)
我做了一个小型演示,以获取selectedPane 。在此窗格中访问控制集合并找到相应的标签
public partial class demo : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
// init data, demo purposes
List<Person> liste = new List<Person>();
liste.Add(new Person() { ID = 0, Name = "jon0" });
liste.Add(new Person() { ID = 1, Name = "jon1" });
liste.Add(new Person() { ID = 2, Name = "jon2" });
liste.Add(new Person() { ID = 3, Name = "jon3" });
liste.Add(new Person() { ID = 4, Name = "jon4" });
Accordion1.DataSource = liste;
Accordion1.DataBind();
}
}
protected void btnGetName_Click(object sender, EventArgs e)
{
// get current pane by using Accordion1.SelectedIndex
Label lblName = Accordion1.Panes[Accordion1.SelectedIndex].FindControl("lblName") as Label;
Debug.WriteLine("Label: " + lblName.Text);
}
}
public class Person
{
public string Name { get; set; }
public int ID { get; set; }
}
这是我的 aspx代码
<asp:Accordion ID="Accordion1" runat="server" SelectedIndex="0">
<HeaderTemplate>
<asp:Label ID="lblID" runat="server" Text='<%#"Pane" + Eval("ID") %>' />
<hr />
</HeaderTemplate>
<ContentTemplate>
<asp:Label ID="lblName" runat="server" Text='<%#Eval("Name") %>' />
<br />
<br />
</ContentTemplate>
</asp:Accordion>
<asp:Button ID="btnGetName" runat="server" Text="GetName" onclick="btnGetName_Click" />