2016-05-24 8 views
1

Ich versuche, ein Array von Zeichenfolge (gefüllt aus einer Listbox auf einer vorherigen Seite und über Session übergeben) und zeigt es in einem Etikett, das ist, wie ich das Array bekam:Schreiben eines übergebenen Arrays über Sitzung in Label funktioniert nicht

Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles CheckOut.Click 
    Dim x = ListBox1.GetSelectedIndices.Count 
    Dim ListPNames(x) As String 
    Dim i As Integer 

    i = 0 
    For Each item As String In ListBox1.GetSelectedIndices 
     ListPNames(i) = (ListBox1.SelectedItem).ToString 
     i = i + 1 

    Next 


    Session("SlctdPhones") = ListPNames(x) 

    Response.Redirect("CheckOut.aspx") 


End Sub 

Und das ist, wie ich es versuche anzuzeigen:

Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load 


    Dim SlctdPhones() As String = CType(Session.Item("SlctdPhones"), Array) 
    Dim i As Integer 

    Label3.Text = "" 

    For i = 0 To SlctdPhones.Length - 1 

    Label3.Text += SlctdPhones(i).ToString() + Environment.NewLine 
    Next 


End Sub 

es ist mir ein Fehler geben: Objektverweis auf ein insta nicht gesetzt nce eines Objekts. wenn es die SlctdPhones.Length erreicht - 1 Linie !! ich weiß nicht, wie ich es beheben kann, auch richtig mein Array-Code ist (Ist alles in es richtig gelagert?)

+0

Wahrscheinlich bezogen werden: [Was bedeutet „Der Objektverweis wurde nicht festgelegt auf eine Instanz eines Objekts“ bedeuten?] (Http: //stackoverflow.com/questions/779091/what-does-object-reference-not-set-to-an-instance-of-an-object-mean) – Krease

+0

aber das Array ist bereits deklariert und hat die Werte aus dem vorherigen übernommen Seite, warum bekomme ich immer noch den Fehler ?! das verstehe ich nicht – xTMx

+0

Wenn Sie über den Debugger nicht selbst sagen können, ob das Array die richtigen Daten hat, müssen Sie hier zu den Grundlagen zurückkehren. –

Antwort

2

Sie erklären die For Schleife wie folgt aus:

For Each item In ... 

Aber dann nie im Körper der Schleife die item Variable verwenden. Stattdessen verwenden Sie dieselbe SelectedItem-Eigenschaft. Sie wollen, dass die ganze Methode ändern, wie folgt aussehen:

Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles CheckOut.Click 
    Dim PNames As New List(Of String)() 
    For Each index As Integer In ListBox1.GetSelectedIndices 
     PNames.Add(ListBox1.Items(index).Value) 
    Next 
    Session("SlctdPhones") = PNames 

    Response.Redirect("CheckOut.aspx") 
End Sub 

Damit fixiert ist, kann die Page_Load tun:

Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load 
    Dim SlctdPhones As List(Of String) = TryCast(Session.Item("SlctdPhones"), List(Of String)) 

    If SlctdPhones Is Nothing OrElse SlctdPhones.Length = 0 Then 
     'Something went wrong here! 
     Return 
    End If 

    Label3.Text = String.Join("<br/>", SlctdPhones.ToArray()) 
End Sub 

Aber ich würde wirklich lieben Sie eine Datensteuerung verwenden, um zu sehen eher als stopfen <br/> s in ein Etikett. Hier ist Markup für eine Listview:

<asp:ListView ID="ListView1" runat="server"> 
    <LayoutTemplate> 
    <ul> 
     <asp:PlaceHolder ID="itemPlaceholder" runat="server" />  
    </ul>     
    </LayoutTemplate> 
    <ItemTemplate> 
    <li><%# Container.DataItem.ToString() %></li> 
    </ItemTemplate> 
    <EmptyDataTemplate> 
    <p>Nothing here.</p> 
    </EmptyDataTemplate> 
</asp:ListView> 

Und dann Page_Load ist noch einfacher:

Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load 
    ListView1.DataSource = Session.Item("SlctdPhones") 
    ListView1.DataBind() 
End Sub 
+0

Versuchte beide, und endete mit der Listenansicht, weil es viel besser und sauberer zu verwenden ist. Danke! – xTMx

1

Auf Display-Seite, verwenden Wörtliche anstelle von Label

Dim SlctdPhones() As String = CType(Session.Item("SlctdPhones"), Array) 
Dim result as String = string.Join("<br>", SlctdPhones) 'Instead of <br> try Environment.NewLine as well 
YourLitetal = result 

Hoffnung dieser hilft!

+0

Eine andere Option könnte sein, dass Sie einfach eine Zeichenfolge mit Trennzeichen (durch Zeilenumbruch) auf der ersten Seite (eher Array) erstellen, sie an die nächste Seite übergeben und mit Literal anzeigen. YourLiteral = Sitzung ("DelimitedSelectedItem"). ToString() Danke – Sami

Verwandte Themen