Как включить переменную Session в NavigateUrl в гиперссылку - PullRequest
1 голос
/ 03 августа 2010

Я уверен, что делал это раньше, но не могу вспомнить синтаксис.Как включить переменную сеанса в 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>

Ответы [ 2 ]

1 голос
/ 03 августа 2010

Поскольку вы использовали формат привязки данных (<%#), вам необходимо вызвать метод 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"]);
1 голос
/ 03 августа 2010

Если ваша ссылка не находится в элементе управления с привязкой к данным, таком как ListView, вы все равно можете принудительно привязать данные (согласно вашему первому фрагменту кода), вызвав .DataBind () для элемента управления из выделенного кода.

...