Использование Eval() в HyperLink
Часто требуется формировать адреса ссылок на веб-странице в зависимости от извлекаемых значений из базы данных, например в случае если нужно сослаться на другую страницу с параметром ID. Ссылка выглядит так:
~/page.aspx?id=5
Где число 5 будет извлекаться из базы данных.
Надеюсь все, кто сюда попал знают зачем нужен метод Eval(). Eval позволяет связать свойства элементов управления с данными, т.е. вывести значения необходимых полей из БД на страницу. Подробнее читаем в статье «Общие сведения о выражениях для привязки данных» на msdn.
Итак, допустим у нас имеется DataList, в котором выводятся гиперссылки на определенную страницу. Но часто бывает нужно, чтобы на той странице, куда пользователь попадет, кликнув по ссылке, была разная информация в зависимости от ссылки (ведь их много). Надеюсь вы поняли о чем идет речь.
Когда я первый раз это пытался сделать, у меня получился такой код:
<asp:DataList ID="DataList1" runat="server" DataSourceID="ds"> <ItemTemplate> <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='~/index.aspx?p=<%# Eval("ID") %>'> Ссылка </asp:HyperLink> </ItemTemplate> </asp:DataList>
Это неправильно. Ссылка получается такой:
<a href="../index.aspx?p=<%# Eval("ID") %>">
Как видите ссылка получилось совсем не такой которую я хотел.
Решение проблемы
HyperLink должен выглядеть либо так:
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# Eval("ID", "~/index.aspx?p={0}") %>'> Ссылка </asp:HyperLink>
либо так:
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# "~/index.aspx?p=" + Eval("ID") %>'> Ссылка </asp:HyperLink>