asp.net – 当绑定值包含冒号时,如何绑定GridView HyperLinkField的URL?

前端之家收集整理的这篇文章主要介绍了asp.net – 当绑定值包含冒号时,如何绑定GridView HyperLinkField的URL?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试绑定GridView HyperLinkField,以便将绑定列用作URL中的参数值.非常标准的东西 – 没有什么花哨的东西,但是当绑定列包含冒号时绑定失败,即:.我是我的特例,这个值是一个表示持续时间的字符串,例如“14:35”,或“1:07:19”.

这是我的GridView,其时间值绑定到HyperLinkField网址.

  1. <asp:GridView ID="ResultsGridView" runat="server" AutoGenerateColumns="False"
  2. DataSourceID="ResultsDataSource" EnableModelValidation="True"
  3. AllowPaging="True">
  4. <Columns>
  5. <asp:BoundField DataField="Year" HeaderText="Year" SortExpression="Year" />
  6. <asp:HyperLinkField DatanavigateUrlFields="RunTime"
  7. DataTextField="RunTime" HeaderText="Hyperlink"
  8. DatanavigateUrlFormatString="LinkedPage.aspx?param={0}" />
  9. <asp:BoundField DataField="RunTime" HeaderText="Time"
  10. SortExpression="RunTime" />
  11. <asp:BoundField DataField="FullName" HeaderText="Name"
  12. SortExpression="FullName" ReadOnly="True" />
  13. </Columns>
  14. </asp:GridView>

它产生这样的HTML.注意< a>标签没有href属性.

  1. <tr>
  2. <td>2010</td><td><a>34:58</a></td><td>34:58</td><td>Joe Schmoe</td>
  3. </tr><tr>
  4. <td>2010</td><td><a>35:30</a></td><td>35:30</td><td>Rod Krueger</td>
  5. </tr><tr>
  6. <td>2010</td><td><a>35:38</a></td><td>35:38</td><td>Mike Johnson</td>
  7. </tr>

但是,如果我将绑定字段从RunTime切换到Year,即切换到值中不包含冒号的列,它将按预期工作.上面的GridView,并更改HyperLinkField的DatanavigateUrlFields属性,如下所示:

  1. <asp:HyperLinkField DatanavigateUrlFields="Year"
  2. DataTextField="RunTime" HeaderText="Hyperlink"
  3. DatanavigateUrlFormatString="LinkedPage.aspx?param={0}" />

现在HTML输出是正确的,如下所示:

  1. <tr>
  2. <td>2010</td><td><a href="LinkedPage.aspx?param=2010">34:58</a></td><td>34:58</td><td>Joe Schmoe</td>
  3. </tr><tr>
  4. <td>2010</td><td><a href="LinkedPage.aspx?param=2010">35:30</a></td><td>35:30</td><td>Rod Krueger</td>
  5. </tr><tr>
  6. <td>2010</td><td><a href="LinkedPage.aspx?param=2010">35:38</a></td><td>35:38</td><td>Mike Johnson</td>
  7. </tr><tr>

所以我的问题的核心是:如何将包含冒号的数据列绑定到HyperLinkField的URL?或者,如果失败,用另一种方法创建相同的绑定超链接

将数据格式更改为不包括冒号将是最后的手段,因为LinkedPage.aspx需要该格式的参数值,并且已经编写,测试和使用.

解决方法

  1. <asp:TemplateField HeaderText="Hyperlink">
  2. <ItemTemplate>
  3. <asp:HyperLink ID="HyperLink1" runat="server"
  4. NavigateUrl='<%# Eval("RunTime",@"LinkedPage.aspx?param={0:hh\:mm}") %>'
  5. Text='<%# Eval("RunTime",@"{0:hh\:mm}") %>'></asp:HyperLink>
  6. </ItemTemplate>
  7. </asp:TemplateField>

猜你在找的asp.Net相关文章