如何一个GridView HyperLinkField字段的URL绑定,当绑定值中包含冒号? [英] How to bind the URL of a GridView HyperLinkField when the bound value contains a colon?
问题描述
我试图绑定一个GridView HyperLinkField字段,这样绑定的列被用作一个URL参数值。 pretty标准的东西 - 当绑定列包含冒号,即没有什么花哨,但绑定失败:
。我为我的特定情况下,这个值是一个字符串,再presenting的持续时间,例如, 14:35或1点07分19秒。
下面是我的GridView控件,用绑定到HyperLinkField字段网址的时间价值。
< ASP:GridView控件ID =ResultsGridView=服务器的AutoGenerateColumns =FALSE
的DataSourceID =ResultsDataSourceEnableModelValidation =真
AllowPaging =真>
<柱体和GT;
< ASP:BoundField的数据字段=年的HeaderText =年SORTEX pression =年/>
< ASP:HyperLinkField字段DataNavigateUrlFields =运行
DataTextField =运行系统的HeaderText =超链接
DataNavigateUrlFormatString =LinkedPage.aspx参数= {0}?/>
< ASP:BoundField的数据字段=运行系统的HeaderText =时代
SORTEX pression =运行系统/>
< ASP:BoundField的数据字段=全名的HeaderText =姓名
SORTEX pression =全名只读=真/>
< /专栏>
< / ASP:GridView的>
它生成HTML这样。请注意,<一个方式>
标签没有的href
属性
< TR>
<td>2010</td><td><a>34:58</a></td><td>34:58</td><td>Joe蠢货&LT; / TD&GT;
&所述; / TR&GT;&下; TR&GT;
<td>2010</td><td><a>35:30</a></td><td>35:30</td><td>Rod克鲁格&LT; / TD&GT;
&所述; / TR&GT;&下; TR&GT;
<td>2010</td><td><a>35:38</a></td><td>35:38</td><td>Mike强LT; / TD&GT;
&LT; / TR&GT;
但是,如果我切换绑定字段从运行时一年,即到不包含的值的冒号一列,它按预期工作。就拿上面的GridView,改变HyperLinkField字段的DataNavigateUrlFields属性,像这样:
&LT; ASP:HyperLinkField字段DataNavigateUrlFields =年
DataTextField =运行系统的HeaderText =超链接
DataNavigateUrlFormatString =LinkedPage.aspx参数= {0}?/&GT;
而现在的HTML输出是正确的,是这样的:
&LT; TR&GT;
&LT; TD&GT; 2010&LT; / TD&GT;&LT; TD&GT;&LT;一href=\"LinkedPage.aspx?param=2010\">34:58</a></td><td>34:58</td><td>Joe蠢货&LT; / TD&GT;
&所述; / TR&GT;&下; TR&GT;
&LT; TD&GT; 2010&LT; / TD&GT;&LT; TD&GT;&LT;一href=\"LinkedPage.aspx?param=2010\">35:30</a></td><td>35:30</td><td>Rod克鲁格&LT; / TD&GT;
&所述; / TR&GT;&下; TR&GT;
&LT; TD&GT; 2010&LT; / TD&GT;&LT; TD&GT;&LT;一href=\"LinkedPage.aspx?param=2010\">35:38</a></td><td>35:38</td><td>Mike强LT; / TD&GT;
&所述; / TR&GT;&下; TR&GT;
所以我的问题的坚果是这样的:我怎么绑定使用包含冒号一个HyperLinkField字段的URL值的数据列?或者,做不到这一点,通过创造另一种方法相同的绑定超链接?
更改数据的格式不包括冒号将是最后的手段,因为LinkedPage.aspx预计该格式的参数值,它已经编写,测试和使用。
&LT; ASP:的TemplateField的HeaderText =超链接&GT;
&LT;&ItemTemplate中GT;
&LT; ASP:超链接ID =HyperLink1=服务器
NavigateUrl ='&LT;%#的eval(运行,@LinkedPage.aspx参数= {0:HH \\:毫米}?)%GT;'
文字='&LT;%#的eval(运行,@{0:HH \\:毫米})%GT;'&GT;&LT; / ASP:超链接&GT;
&LT; / ItemTemplate中&GT;
&LT; / ASP:的TemplateField&GT;
I'm trying to bind a GridView HyperLinkField such that the bound column is used as a parameter value in the URL. Pretty standard stuff - nothing fancy, but the binding fails when the bound column contains a colon, i.e. :
. I'm my particular case, this value is a string representing a duration of time, e.g. "14:35", or "1:07:19".
Here's my GridView, with the time value bound to the 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>
It produces HTML like this. Note that the <a>
tags have no href
attribute.
<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>
But if I switch the bound field from RunTime to Year, i.e. to a column that doesn't contain a colon in the values, it works as expected. Take the GridView above, and change the DataNavigateUrlFields attribute of the HyperLinkField, like so:
<asp:HyperLinkField DataNavigateUrlFields="Year"
DataTextField="RunTime" HeaderText="Hyperlink"
DataNavigateUrlFormatString="LinkedPage.aspx?param={0}" />
And now the HTML output is correct, like this:
<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>
So the nut of my question is this: how do I bind a data column with values that contain a colon to the URL of a HyperLinkField? Or, failing that, create the same bound hyperlink by another method?
Changing the format of the data to not include a colon would be a last resort, because LinkedPage.aspx expects the parameter value in that format, and it's already written, tested and in use.
<asp:TemplateField HeaderText="Hyperlink">
<ItemTemplate>
<asp:HyperLink ID="HyperLink1" runat="server"
NavigateUrl='<%# Eval("RunTime", @"LinkedPage.aspx?param={0:hh\:mm}") %>'
Text='<%# Eval("RunTime", @"{0:hh\:mm}") %>'></asp:HyperLink>
</ItemTemplate>
</asp:TemplateField>
这篇关于如何一个GridView HyperLinkField字段的URL绑定,当绑定值中包含冒号?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!