J'ai un problème vraiment étrange. Je crée une page Web qui récupère une liste de liens d'une base de données et les affiche. Je récupère les enregistrements et les charge dans une liste d'objets. Toutefois, lorsque je parcourt cette liste plus tard, les éléments en double s'affichent.Dupliquer les entrées affichées lors de l'affichage des informations de la base de données - VB.Net ASP.Net
La page pour voir le résultat est http://myhacc.azurewebsites.net/testlinks.aspx
Il devrait y avoir seulement 1 de chaque lien et comme vous pouvez le voir il y a 2 de chacun. Je n'ai pas la moindre idée de pourquoi. J'ai été sur ma logique 10 fois.
J'utilise un Microsoft SQL Server fonctionnant sur Microsoft Azure La page Web est également hébergé sur Microsoft Azure comme une application Web.
J'ai vérifié ma base de données et il n'y a pas d'entrées en double dans la base de données. la structure de la base de données est la suivante
Tableau: myportal_lcat champ: id - entier champ: nom - texte
Tableau: myportal_lhref Champ: catid - entier champ: dname - texte Champ: href - texte
le code est le suivant
<%@ Page Title="" Language="VB" MasterPageFile="~/Main.master" %>
<script runat="server">
Private oCon As Data.SqlClient.SqlConnection
Private oCon2 As Data.SqlClient.SqlConnection
Private oCatCom As New Data.SqlClient.SqlCommand
Private oCatRead As Data.SqlClient.SqlDataReader
Private oItemCom As New Data.SqlClient.SqlCommand
Private oItemRead As Data.SqlClient.SqlDataReader
Private liLinks As New List(Of linkItem)
Private Sub Page_Load() Handles Me.Load
oCon = New Data.SqlClient.SqlConnection("Server=xxxx,1433;Database=xxxxx;User ID=xxxxxx;Password=xxxxx;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;")
oCon2 = New Data.SqlClient.SqlConnection("Server=xxxxxx,1433;Database=xxxx;User ID=xxxx;Password=xxxxx;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;")
oCon.Open()
oCon2.Open()
oCatCom.Connection = oCon
oCatCom.CommandText = "Select * From myportal_lcat"
oItemCom.Connection = oCon2
oItemCom.CommandText = "Select * From myportal_lhref"
oCatRead = oCatCom.ExecuteReader()
oItemRead = oItemCom.ExecuteReader()
Do While oItemRead.Read
liLinks.Add(New linkItem With {.CatID = oItemRead("catid"), .DName = oItemRead("dname"), .HREF = oItemRead("href")})
Loop
End Sub
Private Class linkItem
Private m_CatID As Integer
Private m_DName As String
Private m_HREF As String
Public Property CatID() As Integer
Get
CatID = m_CatID
End Get
Set(value As Integer)
m_CatID = value
End Set
End Property
Public Property DName() As String
Get
DName = m_DName
End Get
Set(value As String)
m_DName = value
End Set
End Property
Public Property HREF() As String
Get
HREF = m_HREF
End Get
Set(value As String)
m_HREF = value
End Set
End Property
End Class
</script>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
My Portal - Test
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="PageHeader" Runat="Server">
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="PageContent" Runat="Server">
<%Dim t As linkItem %>
<%Do While oCatRead.Read()%>
<section class="links">
<h2><%=oCatRead("name") %></h2>
<ul>
<%For each t In liLinks %>
<%If t.CatID = oCatRead("id") Then %>
<li><a href="<%=t.HREF %>"><%=t.DName %></a></li>
<%End If %>
<%Next %>
</ul>
</section>
<%Loop%>
</asp:Content>
est-il votre charge de page plusieurs fois en cours d'exécution? Vous allez devoir déboguer cela de votre côté. Je ne vois rien qui le ferait normalement charger deux fois. –
Il semble un peu inutile d'utiliser 2 qeuries pour obtenir les données. Il semble que votre code rejoignant les 2 tables sur une colonne d'id. Alors pourquoi ne pas l'écrire comme une seule déclaration et vous éviter les tracas d'avoir à rejoindre les tables avec des boucles compliquées ... – Jeroen
Sean Lange - C'était le problème que le chargement de la page fonctionnait deux fois. Je ne sais pas pourquoi ça devrait fonctionner deux fois mais ça l'était. J'ai déplacé l'initialisation de la liste de la déclaration juste au-dessus de la boucle do et cela a corrigé le problème. – Velocibadgery