Aspxページにインラインで(gridviewではなく)スタンドアロンハイパーリンクコントロールのNavigateUrlプロパティを動的に設定するにはどうすればよいですか?
次のことを試みましたが、うまくいきませんでした。
<asp:HyperLink id="MyLink"
NavigateUrl="../mypage.aspx?id=<%= pageid %>"
runat="server">My Page</asp:HyperLink>
コードビハインドでこれを行うことができます:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string pageid = "123";
MyLink.NavigateUrl = string.Format("../mypage.aspx?id={0}", pageid);
}
}
更新:
@Marko IvanovskiがこのハイパーリンクがGridView
の中にあるというコメントで私を指摘したので、最初は気づかなかったが、最も簡単なのはデータバインディング(<%#
構文):
<asp:TemplateColumn>
<ItemTemplate>
<asp:HyperLink
id="MyLink"
NavigateUrl='<%# Eval("pageid", "~/mypage.aspx?id={0}") %>'
runat="server">
My Page
</asp:HyperLink>
</ItemTemplate>
</asp:TemplateColumn>
この場合、pageid
はデータソースのプロパティです。
更新2:
サーバー側のコントロールが本当に必要ですか?どうですか:
<a href="<%= this.ResolveUrl("~/mypage.aspx?id=" + pageid) %>">
My Page
</a>
実際には、分離コードファイルに単純な文字列メソッドを記述できます。
例
public string formatUrl(string pageId) {
return "../mypage.aspx?id=" + pageId;
}
そしてそれを使って.
<asp:HyperLink id="MyLink" NavigateUrl="<%= formatUrl(pageid) %>" runat="server">My Page</asp:HyperLink>
指定されたページIDが存在します
<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>