Как использовать маршрутизацию в веб-формах и HyperLinkFields GridView - PullRequest
2 голосов
/ 06 ноября 2010

У меня есть маршрут, подобный следующему:

 routes.MapPageRoute("section-page-id", "{section}/{page}/{id}", "~/{section}/{page}.aspx")

У меня есть GridView с HyperLinkField, который выглядит следующим образом:

<asp:HyperLinkField NavigateUrl="<%$RouteUrl:RouteName=section-page-id,section=Clients,page=Groups,id=5%>" Text="Groups" />

Это отлично работает;тем не менее, я хочу использовать 5 в качестве динамического идентификатора записи в GridView.До того, как я попробовал маршрутизацию, я бы использовал DataNavigateUrlFields, но я не могу заставить его работать здесь.Есть предложения?

Ответы [ 2 ]

4 голосов
/ 10 ноября 2010

Управление гиперссылкой asp не будет работать, но простой якорь будет!Я пробовал множество различных решений с серверным кодом и ссылками на элементы управления, но это, похоже, единственное решение, которое я нашел с помощью gridview и маршрутизации в веб-формах asp.net 4.0.

<asp:TemplateField>
  <ItemTemplate>
    <a href="<% #GetRouteUrl("section-page-id",
      new with  {.section="Clients", .page="Groups", .id=Eval("Id")})%>">test</a>
  </ItemTemplate>
</asp:TemplateField>
0 голосов
/ 08 ноября 2010

Преобразуйте его в поле шаблона, а затем используйте функцию Eval, чтобы получить поле идентификатора.Переименование «ID» в любое имя поля вашей группы ID.

<asp:HyperLinkField NavigateUrl="<%$RouteUrl:RouteName=section-page-id,section=Clients,page=Groups,id=Convert.Int32(Eval("ID"))%>" Text="Groups" />

Возможно, вам придется немного изменить это.

В качестве альтернативы используйте событие OnRowDataBound для установки NavigateUrl вашей гиперссылки.

var hyperLink = (HyperLink)e.Row.FindControl("HyperLink1");
hyperLink.NavigateUrl = ""; //Set here.
...