ASP.NET 1.1 server control for <link> - enabling relative URL paths using tilde "~"
[DefaultProperty("Text"),ToolboxData("<{0}:Link runat=server Href=\"\" Rel=\"Stylesheet\" Type=\"text/css\"></{0}:Link>")]
public class Link : System.Web.UI.WebControls.WebControl
{
private string _href;
public string Href
{
get { return _href; }
set { _href = value; }
}
protected override void Render(HtmlTextWriter output)
{
output.WriteBeginTag("link");
output.WriteAttribute("href",base.ResolveUrl(this.Href));
foreach (string key in this.Attributes.Keys)
{
output.WriteAttribute(key,this.Attributes[key]);
}
output.Write(HtmlTextWriter.TagRightChar);
output.WriteEndTag("link");
}
}
You can then simply drop it in the <head> section of your page (provided you've used the Register directive to register the assembly):
The reason I had to roll my own is that when you add runat="server" for the <link> element, it turns into a HtmlGenericControl instance on the server, which is obviously used for numerous HTML elements, and as such no specific path resolve mechanism is applied to any of its attributes, since the attributes are different per HTML element.
Hope it helps someone out.