Dynamically set a hyperlink control's NavigateUrl property inline Dynamically set a hyperlink control's NavigateUrl property inline asp.net asp.net

Dynamically set a hyperlink control's NavigateUrl property inline


You could do this in the codebehind:

protected void Page_Load(object sender, EventArgs e){    if (!IsPostBack)    {        string pageid = "123";        MyLink.NavigateUrl = string.Format("../mypage.aspx?id={0}", pageid);    }}

UPDATE:

Now that @Marko Ivanovski pointed me in the comments that this hyperlink is inside a GridView which I didn't notice in the beginning the easiest would be to use databinding (<%# syntax):

<asp:TemplateColumn>    <ItemTemplate>        <asp:HyperLink             id="MyLink"             NavigateUrl='<%# Eval("pageid", "~/mypage.aspx?id={0}")  %>'            runat="server">        My Page        </asp:HyperLink>    </ItemTemplate></asp:TemplateColumn>

In this case pageid is a property of the data source.


UPDATE 2:

Do you really need a server side control? How about:

<a href="<%= this.ResolveUrl("~/mypage.aspx?id=" + pageid) %>">    My Page</a>


You can actually write a simple string method in your codebehind file.

Example

public string formatUrl(string pageId) {    return "../mypage.aspx?id=" + pageId;}

And then use it like..

<asp:HyperLink id="MyLink" NavigateUrl="<%= formatUrl(pageid) %>" runat="server">My Page</asp:HyperLink>

provided pageid exists


<asp:TemplateField HeaderText="Name" HeaderStyle-Width="100">    <ItemTemplate>        <a href="f.aspx?id=<%# DataBinder.Eval(Container, "DataItem.i")%>">            <asp:Label ID="lblN" Font-Underline="true" runat="server" Width="80px" Text='<%#DataBinder.Eval(Container.DataItem,"n")%>' />        </a>    </ItemTemplate></asp:TemplateField>