Как связать URL-адрес GridView HyperLinkField, когда связанное значение содержит двоеточие? - PullRequest
6 голосов
/ 30 июня 2011

Я пытаюсь связать GridView HyperLinkField таким образом, чтобы связанный столбец использовался в качестве значения параметра в URL.Довольно стандартный материал - ничего особенного, но привязка завершается неудачно, когда связанный столбец содержит двоеточие, то есть :.В моем конкретном случае это значение представляет собой строку, представляющую продолжительность времени, например, «14:35» или «1:07:19».

Вот мой GridView со значением времени, привязанным кURL-адрес HyperLinkField.

<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 выше и измените атрибут DataNavigateUrlFields HyperLinkField, например, так:

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

Итак, гайкау меня такой вопрос: как связать столбец данных со значениями, которые содержат двоеточие, к URL-адресу HyperLinkField?Или, если это не удастся, создать такую ​​же связанную гиперссылку другим методом?

Изменение формата данных, чтобы не включать двоеточие, было бы последним средством, поскольку LinkedPage.aspx ожидает значение параметра в этом формате, и оно уже записано, протестировано и используется.

Ответы [ 2 ]

8 голосов
/ 01 июля 2011
<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>
1 голос
/ 30 июня 2011

Ничего себе, очень странно, хуже становится хуже, как последний шаг, вы всегда можете подключиться к RowDataBound и установить для текста ячейки гиперссылку HTML самостоятельно, а пока попробуйте подключиться к RowDataBound и проверить результаты там.,Может быть, вы можете закодировать значение во время привязки, чтобы, если есть проблема с:, кодирование, вероятно, решит ее?

Возможно, вы также захотите отправить это как ошибку на connect.microsoft.com ...

HTH.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...