Come associare l’URL di una GridView HyperLinkField quando il valore associato contiene i due punti?

Sto cercando di associare una GridView HyperLinkField tale che la colonna associata è utilizzato come valore di un parametro nell’URL. Roba abbastanza standard, niente fronzoli, ma l’associazione non riesce quando la colonna associata contiene i due punti, cioè :. Sto mio caso particolare, questo valore è una stringa che rappresenta una durata di tempo, per esempio “14:35” o “1:07:19”.

Ecco la mia GridView, con il valore di tempo legato al 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>

Produce l’HTML come questo. Nota che il <a> tag non hanno href attributo.

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

Ma se posso passare il campo associato dal RunTime per Anno, cioè una colonna che non contengono due punti nei valori, funziona come previsto. Prendere la GridView di cui sopra, e cambiare il DataNavigateUrlFields attributo del HyperLinkField, in questo modo:

    <asp:HyperLinkField DataNavigateUrlFields="Year" 
        DataTextField="RunTime" HeaderText="Hyperlink" 
        DataNavigateUrlFormatString="LinkedPage.aspx?param={0}" />

E ora l’output HTML è corretto, come questo:

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

In modo che il dado di la mia domanda è questa: come faccio ad associare una colonna di dati con i valori che contengono un colon l’URL di una HyperLinkField? O, in mancanza, a creare lo stesso collegamento ipertestuale associato con un altro metodo?

Cambiare il formato dei dati non includono i due punti sarebbe l’ultima risorsa, perché LinkedPage.aspx prevede che il valore del parametro in quel formato, è già scritto, testato e in uso.

OriginaleL’autore Matt | 2011-06-30

2 Replies
  1. 8
    <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>
    Come è possibile questo collegamento ipertestuale essere utilizzato per caricare un secondo gridview nella stessa pagina?
    utilizzare un LinkButton o ImageButton, allegare un gestore per l’evento ItemCommand, quindi un UpdatePanel dove si include la seconda griglia. Il codice del gestore di eventi è vincolante per il datasource della griglia.
    Io non sono sicuro di cosa si intende per un pannello di aggiornamento. La corrente di campo è un semplice Boundfield per mostrare un nome nel gridview. Così, se devo usare un linkbutton dovrò trovare un modo per mostrare il db dei dati sul linkbutton come testo o sth. Forse si potrebbe postare una risposta qui. ho una volontà di ricerca e di provare il tuo suggerimento.

    OriginaleL’autore Adrian Iftode

  2. 1

    Wow, molto strano, n’è di peggio, come ultimo passo, si può sempre attingere RowDataBound, e impostare la cella di testo collegamento ipertestuale HTML da te, ma, nel frattempo, prova a toccare in RowDataBound ed esaminare i risultati. Forse è possibile codificare il valore vincolante del tempo, in modo che se c’è un problema :, codifica probabilmente verrà risolto?

    Si potrebbe anche voler presentare come un bug connect.microsoft.com…

    HTH.

    Grazie, @Brian, ti darò una prova. Ho il sospetto che abbia qualcosa a che fare con i due punti e di essere utilizzato come parte del valore segnaposto in DataNavigateUrlFormatString, ad esempio, se ho avuto un valore di valuta di formato potrei utilizzare {0:C} invece di {0} nella stringa di formato.
    Sì che potrebbe avere un senso, ma io credo che è applicabile solo se si aveva il {}, ma chi lo sa..

    OriginaleL’autore Brian Mains

Lascia un commento