2010-12-03 22 views
1

J'apprends actuellement .net et je suis arrivé à un mur de briques en essayant d'implémenter le montage d'url. J'ai la plupart de travail très bien, mais j'essaie de générer des liens hypertexte à partir d'informations dans ma base de données.ASP.NET 4 ACCÉDER AUX DONNÉES POUR S'APPLIQUER À NavigateUrl

Je reçois les données est bien passé à l'aide:

'portfolio navigation data 
    Dim rdrPortfolioNav As SqlDataReader 

    Dim cmdPortfolioNav As SqlCommand = New SqlCommand() 
    cmdPortfolioNav.CommandText = "SELECT TOP 6 [id], [date], [client], [category], [title], [body], [website], [navimage], [navdesc] FROM [portfolio] ORDER BY [date] DESC" 
    cmdPortfolioNav.CommandType = CommandType.Text 
    cmdPortfolioNav.Connection = boomSQL 

    cmdPortfolioNav.Connection.Open() 
    rdrPortfolioNav = cmdPortfolioNav.ExecuteReader(CommandBehavior.CloseConnection) 

    lvPortfolioNav.DataSource = rdrPortfolioNav 
    lvPortfolioNav.DataBind() 

    cmdPortfolioNav.Dispose() 

À l'avant, je peux accéder aux données et afficher tous les enregistrements à l'aide:

<asp:ListView ID="lvPortfolioNav" runat="server"> 
<ItemTemplate> 
    <div class="work"> 
     <asp:HyperLink runat="server" NavigateUrl="portfolio/<%# DataBinder.Eval(Container.DataItem, &quot;id&quot;)%>/<%# FormatLinks(DataBinder.Eval(Container.DataItem, &quot;category&quot;)) %>/<%# FormatLinks(DataBinder.Eval(Container.DataItem, &quot;title&quot;)) %>" ToolTip=""><span class="title"><%# DataBinder.Eval(Container.DataItem, "title")%></span></asp:HyperLink> 
     <asp:Image runat="server" ImageUrl="<%# DataBinder.Eval(Container.DataItem, &quot;navimage&quot;)%>" AlternateText="<%# DataBinder.Eval(Container.DataItem, &quot;client&quot;)%>" ToolTip="<%# DataBinder.Eval(Container.DataItem, &quot;client&quot;)%>" /> 
     <span class="desc"><%# DataBinder.Eval(Container.DataItem, "navdesc")%></span> </div> 
</ItemTemplate> 

Le problème est ligne:

<asp:HyperLink runat="server" NavigateUrl="portfolio/<%# DataBinder.Eval(Container.DataItem, &quot;id&quot;)%>/<%# FormatLinks(DataBinder.Eval(Container.DataItem, &quot;category&quot;)) %>/<%# FormatLinks(DataBinder.Eval(Container.DataItem, &quot;title&quot;)) %>" ToolTip=""><span class="title"><%# DataBinder.Eval(Container.DataItem, "title")%></span></asp:HyperLink> 

il ne sera pas les valeurs de la base de données et dans le code HTML le lien vient littéralement comme:

<a href="../../portfolio/%3C%25#%20DataBinder.Eval(Container.DataItem,%20%22id%22)%25%3E/%3C%25%23%20FormatLinks(DataBinder.Eval(Container.DataItem,%20%22category%22))%20%25%3E/%3C%25%23%20FormatLinks(DataBinder.Eval(Container.DataItem,%20%22title%22))%20%25%3E"><span class="title">Kingston Bagpuize House Website</span></a> 

la même chose fonctionne très bien pour le ImageUrl donc je ne sais ce que je fais mal.

Je sais que vous pouvez faire quelque chose dans le code backend pour générer les URL mais je ne peux pas pour la vie de moi trouver quelque chose sur internet ..... l'aide serait très appréciée.

Merci.

J.

Répondre

1

Vous ne devriez pas utiliser # et écrire <% en NavigateURL.

Suivez l'exemple suivant

http://www.extremeexperts.com/Net/FAQ/PassingMulitpleParameterinURLLink.aspx

+0

J'ai essayé comme suggéré et changé en: » info-bulle = ""><% # DataBinder.Eval (Container.DataItem, "title")%> mais je reçois toujours l'erreur: L'étiquette du serveur n'est pas bien formé sur la même ligne – JBoom

+0

Pouvez-vous le remplacer par guillemets simples au lieu de double dans NavigateURL selon le lien –

0

Plutôt que de faire tout le travail à l'avant, pourquoi ne pas mettre le bâtiment d'URL dans le code sous-jacent?

En fin avant:

NavigateUrl = » <% # this.BuildURL (DataBinder.Eval (Container.DataItem, "id"), DataBinder.Eval (Container.DataItem, "catégorie"), DataBinder .Eval (Container.DataItem, "title")) »

en behind:

chaîne publique BuildURL (chaîne a, b chaîne, string c) { /* concaténer la chaîne en utilisant le constructeur de chaîne et de retour * /}

Vous devrez toujours lier le contrôle Chaque fois que le lien est lié, la méthode sera appelée avec les valeurs appropriées et la chaîne complétée sera retournée à NavigateURL.

+0

salut, pense que c'était le genre de chose que je voulais faire au début, mais je n'ai pas pu trouver comment, je Je vais essayer votre suggestion quand je suis de retour et voir si je peux y arriver, merci. – JBoom

0

Je fais comme ça

NavigateUrl = '<% # "~/ProductList.aspx? ITEMSUBCATID =" + DataBinder.Eval (Container.DataItem, "ITEMSUBCATID")%>'