【发布时间】:2011-09-26 05:58:30
【问题描述】:
我正在尝试绑定一个 GridView HyperLinkField,以便将绑定的列用作 URL 中的参数值。非常标准的东西 - 没什么花哨的,但是当绑定列包含冒号时绑定失败,即:。我是我的特例,这个值是一个表示持续时间的字符串,例如“14:35”或“1:07:19”。
这是我的 GridView,时间值绑定到 HyperLinkField url。
<asp:GridView ID="ResultsGridView" runat="server" AutoGenerateColumns="False"
DataSourceID="ResultsDataSource" EnableModelValidation="True"
AllowPaging="True">
<Columns>
<asp:BoundField DataField="Year" HeaderText="Year" SortExpression="Year" />
<asp:HyperLinkField DataNavigateUrlFields="RunTime"
DataTextField="RunTime" HeaderText="Hyperlink"
DataNavigateUrlFormatString="LinkedPage.aspx?param={0}" />
<asp:BoundField DataField="RunTime" HeaderText="Time"
SortExpression="RunTime" />
<asp:BoundField DataField="FullName" HeaderText="Name"
SortExpression="FullName" ReadOnly="True" />
</Columns>
</asp:GridView>
它会生成这样的 HTML。注意<a> 标签没有href 属性。
<tr>
<td>2010</td><td><a>34:58</a></td><td>34:58</td><td>Joe Schmoe</td>
</tr><tr>
<td>2010</td><td><a>35:30</a></td><td>35:30</td><td>Rod Krueger</td>
</tr><tr>
<td>2010</td><td><a>35:38</a></td><td>35:38</td><td>Mike Johnson</td>
</tr>
但是,如果我将绑定字段从 RunTime 切换到 Year,即切换到值中不包含冒号的列,它会按预期工作。拿上面的GridView,修改HyperLinkField的DataNavigateUrlFields属性,如下:
<asp:HyperLinkField DataNavigateUrlFields="Year"
DataTextField="RunTime" HeaderText="Hyperlink"
DataNavigateUrlFormatString="LinkedPage.aspx?param={0}" />
现在 HTML 输出是正确的,如下所示:
<tr>
<td>2010</td><td><a href="LinkedPage.aspx?param=2010">34:58</a></td><td>34:58</td><td>Joe Schmoe</td>
</tr><tr>
<td>2010</td><td><a href="LinkedPage.aspx?param=2010">35:30</a></td><td>35:30</td><td>Rod Krueger</td>
</tr><tr>
<td>2010</td><td><a href="LinkedPage.aspx?param=2010">35:38</a></td><td>35:38</td><td>Mike Johnson</td>
</tr><tr>
所以我的问题的关键是:如何将包含冒号的值的数据列绑定到 HyperLinkField 的 URL?或者,如果做不到这一点,通过另一种方法创建相同的绑定超链接?
将数据格式更改为不包含冒号将是最后的手段,因为 LinkedPage.aspx 需要采用该格式的参数值,并且它已经编写、测试和使用。
【问题讨论】:
标签: asp.net gridview hyperlink webforms