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