asp.net – Dynamically set a hyperlink controls NavigateUrl property inline

asp.net – Dynamically set a hyperlink controls 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 didnt 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.net – Dynamically set a hyperlink controls NavigateUrl property inline

<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>

Leave a Reply

Your email address will not be published.