访问Repeater HeaderTemplate中的超链接服务器控件

时间:2011-07-28 15:05:52

标签: c#

如何使用headertemplate访问'HyperlinkID1'控件? 我喜欢改变下面的值,但我无法访问控件,因为它一直告诉“当前上下文中不存在名称'HyperlinkID1'”

if (!IsPostBack)
{
     HyperlinkID1.ImageUrl = "asc.jpg";//change image
}
else
{
     HyperlinkID1.ImageUrl = "asc.jpg";//change image
}

    <%@ Page Language="C#" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <script language="C#" runat="server">
        public class PositionData
        {
            private string name;
            private string ticker;
            public PositionData(string name, string ticker)
            {
                this.name = name;
                this.ticker = ticker;
            }
            public string Name
            {
                get
                {
                    return name;
                }
            }
            public string Ticker
            {
                get
                {
                    return ticker;
                }
            }
        }

        protected void Page_Load(object sender, EventArgs e)
        {

            if (!IsPostBack)
            {
                HyperlinkID1.ImageUrl = "asc.jpg";//change image

            }
            else
            {
                HyperlinkID1.ImageUrl = "asc.jpg";//change image
            }


            if (!IsPostBack)
            {
                ArrayList values = new ArrayList();

                values.Add(new PositionData("Microsoft", "Msft"));
                values.Add(new PositionData("Intel", "Intc"));
                values.Add(new PositionData("Dell", "Dell"));

                Repeater1.DataSource = values;
                Repeater1.DataBind();


            }
        }
    </script>
    <body>
        <form runat="server">
        <b>Repeater1:</b>
        <asp:Repeater ID="Repeater1" runat="server">
            <HeaderTemplate>
                <table border="1">
                    <tr>
                        <td><b>Company</b>
                            <asp:HyperLink ID="HyperlinkID1" runat="server" ImageUrl="desc.jpg" NavigateUrl="nextpage.aspx">HyperLink</asp:HyperLink></td>
                        <td><b>Symbol</b></td>
                    </tr>
            </HeaderTemplate>
            <ItemTemplate>
                <tr>
                    <td><%# DataBinder.Eval(Container.DataItem, "Name") %> </td>
                    <td><%# DataBinder.Eval(Container.DataItem, "Ticker") %> </td>
                </tr>
            </ItemTemplate>
            <FooterTemplate>
                </table>
            </FooterTemplate>
        </asp:Repeater>
        </form>
    </body>
    </html>

1 个答案:

答案 0 :(得分:1)

控件不存在。您需要声明一个链接到转发器的OnItemCreated方法,并在此处为控件名称执行FindControl,并在此设置值。

ETA - 回应评论。

<asp:Repeater OnItemCreated="rptItemCreated" >

.
.
.

在代码中,您需要定义定义的新方法:

protected void rptItemCreated(Object Sender, RepeaterItemEventArgs e)
{

    if(e.Item.ItemType==ListItemType.Header)
    {
        HtmlAnchor HyperLinkID1=(HtmlAnchor)e.Item.FindControl("HyperLinkID1");
        HyperlinkID1.ImageUrl = IsPostBack?"asc.jpg":"asc.jpg;
    }
}

请注意,这是从内存中输入的,因此可能需要进行一些调整。此外,我已将您所拥有的代码放入一个缩略图中,这与格式相同但更简洁。