web-dev-qa-db-fra.com

Définir dynamiquement la propriété NavigateUrl d'un contrôle d'hyperlien en ligne

Comment définir dynamiquement une propriété NavigateUrl du contrôle de lien hypertexte autonome (pas dans gridview) dans la page aspx?

J'ai essayé de faire ce qui suit, mais cela n'a pas fonctionné.

<asp:HyperLink id="MyLink"
  NavigateUrl="../mypage.aspx?id=<%= pageid %>"
  runat="server">My Page</asp:HyperLink>
13
dtc

Vous pouvez le faire dans le code ci-dessous:

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

METTRE À JOUR:

Maintenant que @Marko Ivanovski m'a signalé dans les commentaires que ce lien hypertexte est à l'intérieur d'une variable GridView que je n'avais pas remarquée au début, le plus simple serait d'utiliser la liaison de données (syntaxe <%#):

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

Dans ce cas, pageid est une propriété de la source de données.


MISE À JOUR 2:

Avez-vous vraiment besoin d'un contrôle côté serveur? Que diriez-vous: 

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

Vous pouvez réellement écrire une méthode de chaîne simple dans votre fichier codebehind.

Exemple

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

Et puis utilisez-le comme ..

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

à condition que pageid existe

4
Marko
<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>
0
user5359794