Following the various blogs on Google, Simon Willison's, and Six Apart Professional Network, Robert Love's, Scott Watermasysk's, among others, I have implemented a C# server side control using the Borland Delphi 2005 IDE that extends the HyperLink webcontrol to support the rel="nofollow" attribute.

The Borland Delphi 2005 IDE now can support the following languages: C#, Delphi (Win32 and .NET), and Visual Basic.NET.

The code you see will be pretty much self-explanatory for those of you familiar with the ASP.NET Framework.

    [ToolboxData("<{0}:HyperLinkNoFollow  runat=server>")]
    public class HyperLinkNoFollow : System.Web.UI.WebControls.HyperLink
    {
        private bool _NoFollow = true;

        [Bindable(true), DefaultValue(true)]
        public bool NoFollow
        {
            get
            {
                return _NoFollow;
            }

            set
            {
                _NoFollow = value;
            }
        }

        private string _FollowList = "";
        [Bindable(true), DefaultValue("")]
        public string FollowList
        {
            get { return _FollowList; }
            set { _FollowList = value; }
        }

        protected override void AddAttributesToRender(HtmlTextWriter writer)
        {
            bool LFollow = false;
            if (_NoFollow)
            {
                string LFollowList = _FollowList;
                string Url = NavigateUrl;
                string[] Domains = null;
                char[] Splitter = {';'};
                if (LFollowList!=null)
                    Domains = LFollowList.Split(Splitter);
                if (Domains!=null)
                {
                    for(int x=0; x
                    {
                        LFollow|=(Domains[x]!="")&&(Url.IndexOf(Domains[x])>-1);
                        if (LFollow) break;
                    }
                }
                if (!LFollow) writer.AddAttribute("rel", "nofollow");
            }
            // writer.AddAttribute("Follow", LFollow.ToString());
            base.AddAttributesToRender(writer);
        }

    }