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

标签 asp.net gridview hyperlink webforms

我正在尝试绑定(bind) GridView HyperLinkField,以便将绑定(bind)的列用作 URL 中的参数值。非常标准的东西 - 没什么花哨的,但是当绑定(bind)列包含冒号时绑定(bind)失败,即 : 。我是我的特殊情况,这个值是一个表示持续时间的字符串,例如“14:35”或“1:07:19”。

这是我的 GridView,其中时间值绑定(bind)到 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>

但是,如果我将绑定(bind)字段从运行时间切换到年份,即切换到值中不包含冒号的列,它会按预期工作。使用上面的 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>

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

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

最佳答案

<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>

关于asp.net - 当绑定(bind)值包含冒号时,如何绑定(bind) GridView HyperLinkField 的 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6539667/

相关文章:

javascript - "JavaScript Hell"- 像 "DLL Hell"

c# - 从 GridView RowCommand 中的 CommandArgument 获取实体对象

c# - 更改 GridView 项目大小

asp.net - GridView 中 TemplateField 上的 header

html - 添加CSS后,按钮链接停止工作

css - asp .net 背景图像在回发时闪烁

asp.net - 如何理解 google chrome 中针对 Asp.net 提供的静态资源的安全警告

c# - 哪个Lucene SearchAnalyzer用于特殊字符搜索

web-applications - 从 Web 应用程序打开 Microsoft Teams 聊天

css - 链接在点击时移动,这是我见过的最奇怪的事情(在 CSS 中)