从转发器内部访问动态创建的元素

时间:2010-02-04 20:48:19

标签: .net asp.net jquery

我需要在转发器内创建一系列动态创建的按钮。这些按钮名称来自数据库。当用户单击按钮时,名称旁边会显示一些隐藏文本。再次点击时消失。该文本必须在html或后面的代码中定义。

这是一些代码来展示我的想法。

 <asp:Repeater ID="Repeater1" DataSourceID="DecisionDetailsDS" runat="server" >
        <ItemTemplate>
            <asp:Button ID="DecisionButton" runat="server" OnClick="BTN_ShowText" BorderStyle="None"
                Text='<%# Eval("Decision_Type_Dsc") %>' />
            <asp:Label ID="DecisionLabel" Visible="false" runat="server" />
        <p></p>
        </ItemTemplate>
        <AlternatingItemTemplate>
            <asp:Button ID="DecisionButton" runat="server" OnClick="BTN_ShowText" BorderStyle="None"
                Text='<%# Eval("Decision_Type_Dsc") %>' />
             <asp:Label ID="DecisionLabel" Visible="false" runat="server" />                          <p></p>
        </AlternatingItemTemplate>
</asp:Repeater>

public void BTN_ShowText(Object sender, EventArgs e)
{

    Label TestLabel = (Label)FindControl("DecisionLabel");
    Button TestButton = (Button)FindControl("DecisionButton");

    switch(TestButton.Text)
    {
    case "Dismissed":
        TestLabel.Text = "Testing 1 2 3";
        break;

    case "Anything":
        TestLabel.Text = "Testing 2 3 4";
        break;
    }

    if (TestLabel.Visible == false)
    {
        TestLabel.Visible = true;
    }
    else
    {
        TestLabel.Visible = false;
    }

    }
}

我知道这不起作用。我得到nulls返回。而我需要按钮的ID和它的相应标签。希望这可以让您了解我正在尝试做什么。如果您提供我的一些代码,特别感谢您的建议。我想也许可以使用jquery?

我是.net / jquery编程新手。希望有人可以帮助我。 谢谢!

2 个答案:

答案 0 :(得分:1)

FindControl是一种可以在任何控件或Page对象上执行的方法。但是,它不是递归查找 - 也就是说,如果您在Page对象上调用它,它将不会在任何子控件中查找ID。

尝试在BTN_ShowText方法中执行此操作:

Button clickedButton = sender as Button;

Label TestLabel = (Label)clickedButton.Parent.FindControl("DecisionLabel"));
Button TestButton = (Button)clickedButton.Parent.FindControl("DecisionButton");

Parent对象将是单击按钮的转发器的ItemTemplate实例,因此它应该包含您要查找的控件。

答案 1 :(得分:0)

<asp:Repeater ID="Repeater1" DataSourceID="DecisionDetailsDS" runat="server" OnItemDataBound="Repeater1_DataBound">
    <ItemTemplate>
        <asp:Button ID="DecisionButton" runat="server" OnClick="BTN_ShowText" BorderStyle="None" />
        <asp:Label ID="DecisionLabel" Visible="false" runat="server" />
    </ItemTemplate>
</asp:Repeater>

然后在你的代码中

protected void Repeater1_DataBound(object sender, RepeaterItemEventArgs e)
{
    (e.Item.FindControl("DecisionButton") as Button).Text 
        = Convert.ToString(e.DataItem["Decision_Type_Dsc"]);
}

并且您的按钮事件可以执行以下操作:

public void BTN_ShowText(Object sender, EventArgs e)
{
    (sender as Button).Text;
}

这应该让你开始。