【问题标题】:asp:HyperLink dynamic IDasp:HyperLink 动态 ID
【发布时间】:2010-07-22 08:16:51
【问题描述】:

参考:Dynamic Control ID

有没有人有动态创建超链接的 ID 属性的工作示例?

我有一个重复器,其中绘制了多个超链接(调查每行 3 个)。我想更改单击的超链接的图像。中继器是从其绑定的数据源创建的。无法正常工作

编辑:我使用了您的示例,它确实更改了图像,但是它更改了所有 ID="HappyLink" 项目而不是选定的项目。

    // if the happy emoticon was clicked
    if (this.Request.QueryString["hyperlink"] == "HappyLink")
    {
        HyperLink happylink = e.Item.FindControl("HappyLink") as HyperLink;

        if (happylink != null)
        {
            happylink.ImageUrl = "~/images/happy_selected.jpg";
        } // if (happylink != null)
    } // if (this.Request.QueryString["hyperlink"] == "HappyLink")

【问题讨论】:

    标签: asp.net hyperlink


    【解决方案1】:

    我认为您不必担心动态 ID。 Repeater 控件为您整理 ID,您无需关心它们是什么。

    如果您的意思是每个Hyperlink 都是一个图像,那么您需要处理RepeaterItemDataBound 事件。在标记中,您给 Hyperlink 一个 ID。在ItemDataBound 事件处理程序中,您对从事件参数获得的Item 对象使用FindControl 方法,并传递Hyperlink 的ID。这将为您提供实际的超链接控件。然后只需设置图像。

    例如:

    void Repeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
       HyperLink hyperLink = e.Item.FindControl("HappyLink") as HyperLink;
       if (hyperLink != null)
       {
          // do something with the hyperlink
       }
    }
    

    FindControl 方法中,您只需使用您在标记中设置的ID。使用e.Item 可确保您从转发器的右行获取超链接。

    【讨论】:

    • 感谢您的回复。我在转发器中有 3 个超链接控件(HappyLink、OkLink、FailLink),它们都相应地循环。但是,我为他们提供的 ID 对于我拥有的所有数据绑定项都是相同的。我知道 ID 更改为 Repeater1_ctl01_HappyLink 之类的东西。单击时如何使用 FindControl 方法查找第 5 行的第一个图标?例如Repeater1_ctl05_HappyLink。我来自PHP背景,所以请多多包涵
    • @Thomas:我添加了一个示例,希望这能让事情更清楚。
    猜你喜欢
    • 2015-08-27
    • 2016-07-11
    • 2012-06-14
    • 2011-08-23
    • 2013-02-24
    • 2018-06-06
    • 2013-04-07
    • 1970-01-01
    • 2023-03-05
    相关资源
    最近更新 更多