2013-01-10 11 views
6

Używam HyperLinkField wewnątrz gridview i chcę połączyć z innym adresem URL + identyfikatorem.Nawigacja URL za pomocą HyperLinkField wewnątrz widoku siatki

<div id="searchResults" runat="server"> 
    <asp:GridView ID="gvSearchResult" runat="server" AutoGenerateColumns = "false" 
    CaptionAlign="NotSet" CellPadding="5"> 
    <Columns> 
     <asp:TemplateField HeaderText="Användare"> 
      <ItemTemplate> 
       <%# Eval("UName")%> 
       <br /> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:HyperLinkField DataNavigateUrlFields="UName" 
          DataNavigateUrlFormatString='/MemberPages/profile.aspx?ID=<%# Eval("PID") %>' 
          DataTextField="UName" 
          HeaderText="Besök sida" 
          SortExpression="Name" 
          ItemStyle-Width="100px" 
          ItemStyle-Wrap="true" /> 
    </Columns> 
    </asp:GridView> 
</div> 

The gridview korzysta datasource i databind. To narzekają:

DataNavigateUrlFormatString="/MemberPages/profile.aspx?ID=<%# Eval("PID") %>" 

nie jestem pewien gdzie używać <%# Eval("PID") %>, jestem pewien, że jest coś takiego jak PID, mam doublechecked.

Jeśli używam NavigateUrl="/MemberPages/profile.aspx?ID=<%# Eval("PID") %>" ja również uzyskać ten sam błąd:

Literal content ('<asp:HyperLinkField DataNavigateUrlFields="UName" 
           DataNavigateUrlFormatString="/MemberPages/profile.aspx?ID=') is not allowed within a 'System.Web.UI.WebControls.DataControlFieldCollection'. 

Odpowiedz

9

Jeśli trzeba użyć „wewnątrz atrybut wartość, użyj«jako separatora

Attribute='Some value with " symbol' 

Jeśli trzeba użyć»wewnątrz wartości atrybutu, użyj”

Attribute="Some value with ' symbol" 

zmienić także swoją definicję kolumny

<asp:HyperLinkField DataNavigateUrlFields="PID" 
        DataNavigateUrlFormatString="/MemberPages/profile.aspx?ID={0}" 
        DataTextField="UName" 
        HeaderText="Besök sida" 
        SortExpression="Name" 
        ItemStyle-Width="100px" 
        ItemStyle-Wrap="true" /> 

W atrybucie DataNavigateUrlFormatString używana jest kolumna danych określona w DataNaviga teUrlFields (formatowanie jest podobne do metody String.Format).

+0

tag wiążący dane gav me: Wyrażenia związane z formatowaniem danych są obsługiwane tylko na obiektach, które mają zdarzenie DataBinding. System.Web.UI.WebControls.HyperLinkField nie ma zdarzenia DataBinding. – MrProgram

+0

Dziękuję bardzo! Zrobiłeś mój dzień. Nauczyłem się dzisiaj przez 12 godzin i wreszcie mogę iść do łóżka :) Dzięki! – MrProgram

+0

, ale czy możesz mi powiedzieć, co robi {0}? – MrProgram

0

pierwszą rzeczą, chciałbym zrobić jest zastąpienie linii poniżej

DataNavigateUrlFormatString = "/ MemberPages/profile.aspx identyfikator = <% # Eval ("PID")%>”

z linią poniżej

DataNavigateUrlFormatString = '/ MemberPages/profile.aspx? ID = <% # Eval ("PID")%> '

notice Zastąpiłem podwójne cudzysłowy pojedynczymi cudzysłowami oraz początkiem i końcem.

+0

wops. Widziałem to teraz. Zmieniono (i edytowałem pytanie), ale nadal nie mam poprawnego adresu URL. "/MemberPages/profile.aspx?ID=<%# Eval (" PID ")%>" powinien być "/MemberPages/profile.aspx?ID=10 ' – MrProgram

0

Chociaż zaakceptowana odpowiedź działa. W moim przypadku musiałem użyć innej kontroli. W tym przykładzie możesz użyć Eval z ciągiem URL.

<asp:LinkButton PostBackUrl='<%#"~/config.aspx?Id=" + Eval("Id") %>' runat="server">Configuration</asp:LinkButton> 
Powiązane problemy