Я уверен, что сделал это прежде, но не могу помнить синтаксис. Как я включаю переменную сеанса в nagivateUrl в гиперссылке?
Я попробовал это:
<asp:HyperLink ID="lnkMyLink" runat="server" Text="My Link"
NavigateUrl='<%# "http://absoluteURL.org?param=" +
Session["myParameterValue"].ToString()%>'></asp:HyperLink>
и это:
<asp:HyperLink ID="lnkMyLink" runat="server" Text="My Link"
NavigateUrl='<%# String.Format("http://absoluteURL.org?param={0}",
Session["myParameterValue"].ToString()) %>'></asp:HyperLink>
Поскольку вы использовали формат привязки данных ( <% #
), вам необходимо вызвать метод HyperLinks .DataBind ()
из вашего внутреннего кода.
Вам нужно, чтобы ваш метод Page_Load выглядел примерно так:
protected void Page_Load(object sender, EventArgs e)
{
lnkMyLink.DataBind();
}
Единственное, что следует иметь в виду, что использование привязки данных для чего-то вроде этого, то есть не привязки конкретных данных, может немного сбить с толку любого, кто должен поддерживать ваш код в будущем. Хотя определить, что вы сделали и почему вы это сделали, будет довольно быстро и легко, все, что может вызвать путаницу в будущем, должно быть по возможности удалено из вашего кода. Поэтому потенциально лучшим вариантом было бы поместить следующее в вашу Page_Load
:
lnkMyLink.NavigateUrl =
string.Format("http://absoluteURL.org?param={0}", Session["myParameterValue"]);
Если ваша ссылка не находится в элементе управления, связанном с данными, таком как ListView, вы все равно можете принудительно связать данные (согласно вашему первому фрагменту кода), вызвав .DataBind() для элемента управления из code-behind.