2010-07-22 96 views
1

裁判:Dynamic Control IDASP:超链接的动态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") 

回答

2

我不认为你需要担心动态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可确保您从中继器的右侧获得超链接。

+0

感谢您的回复。我在中继器中有3个超链接控件(HappyLink,OkLink,FailLink),并且它们都相应地循环。但是,我给他们的ID与我拥有的所有数据绑定项目相同。我知道ID更改为Repeater1_ctl01_HappyLink。点击时如何使用FindControl方法查找第5行的第一个图标?例如Repeater1_ctl05_HappyLink。我来自一个PHP背景,所以请忍受我 – Thomas 2010-07-22 09:41:51

+0

@Thomas:我已经添加了一个例子,希望这可以让事情更清楚。 – 2010-07-22 10:40:16