【问题标题】:How to use routing in web forms and HyperLinkFields of a GridView如何在 Web 表单和 GridView 的 HyperLinkFields 中使用路由
【发布时间】:2010-11-06 00:01:38
【问题描述】:

我有一个这样映射的路线:

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

我有一个带有 HyperLinkField 的 GridView,以前看起来像这样:

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

这很好用;但是,我希望将 5 作为 GridView 中记录的动态 ID。在我尝试路由之前,我会使用 DataNavigateUrlFields 但我无法让它在这里工作。有什么建议吗?

【问题讨论】:

    标签: asp.net gridview hyperlink routing


    【解决方案1】:

    asp 超链接控件不起作用,但是一个简单的锚点就可以了!我使用服务器端代码和引用控件尝试了大量不同的解决方案,但这似乎是我在 asp.net 4.0 Web 表单中使用 gridview 和路由找到的唯一解决方案。

    <asp:TemplateField>
      <ItemTemplate>
        <a href="<% #GetRouteUrl("section-page-id",
          new with  {.section="Clients", .page="Groups", .id=Eval("Id")})%>">test</a>
      </ItemTemplate>
    </asp:TemplateField>
    

    【讨论】:

      【解决方案2】:

      将其转换为模板字段,然后使用 Eval 函数获取 ID 字段。将“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.
      

      【讨论】:

      • 感谢 Jamie 的帮助,但我无法让任一解决方案正常工作。看来我不能使用 Eval() 方法。
      • 这似乎不适用于超链接。尝试使用上述答案中的普通 html 锚。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-15
      • 1970-01-01
      • 1970-01-01
      • 2013-04-09
      • 1970-01-01
      • 2015-10-09
      相关资源
      最近更新 更多