none
Framework vb Variable RRS feed

  • Frage

  • Ich arbeite mit NET.Framework und vb. Im neuen Web-Projekt habe ich im App_Start eine neue Klasse mit dem Namen Variablen.vb erstellt mit folgendem Inhalt.

    Public Class Variablen
        Dim Land As String = "DE"
    End Class

    keine Fehler beim Kompilieren, trotzdem sag er in der index.aspx wenn ich die Variable abrufe, Variable nicht vorhanden.

    Wer kann helfen?

    Gruss Lothar
    Mittwoch, 25. August 2021 16:09

Antworten

  • Hallo Lothar,

    in deiner index.aspx fehlt die Deklaration der ASP.NET Zuordnung.

    <%@ Page Language="vb" AutoEventWireup="false" CodeBehind="index.aspx.vb" Inherits="camping._Default" %>
    

    Das muss in die allererste Zeile in der index.aspx (wie auch in der hauptseite.aspx, schau es dir einfach mal dort an. Datei- und Klassenname sind dort natürlich anders)

    Die drei Zeilen;

    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
    <link rel="stylesheet" media="all" href="content/site.css">
    <meta name="distribution" content="global">

    gehören zudem nicht vor <!DOCTYPE ...> sondern in den <head>...</head> Node.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Freitag, 3. September 2021 15:05
    Moderator

Alle Antworten

  • Hatte ich vergessen!

    <% Response.Write(Variablen.Land) %>

    So rufe ich ab!

    Mittwoch, 25. August 2021 19:17
  • Hallo Lothar,

    Es scheint, dass Deine Variable Außerhalb des gültigen Bereichs liegt. Ist Dein <%= ... %> Code ein Teil eines Blocks innerhalb einer if-Anweisung, wie hier beschrieben:
    The name '__o' does not exist in the current context

    Gruß,

    Ivan Dragov

    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Donnerstag, 26. August 2021 09:19
    Moderator
  • Hatte ich vergessen!

    <% Response.Write(Variablen.Land) %>

    So rufe ich ab!

    Und wo ist deine Instanz der Klasse "Variablen"? Hast Du die in der index.aspx.vb erstellt?


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Donnerstag, 26. August 2021 09:54
    Moderator
  • Hallo Stefan,

    ja die index.aspx.vb gibt es mit folgendem Inhalt:

    Public Class _Default

        Inherits Page

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

        End Sub
    End Class

    Donnerstag, 26. August 2021 13:29
  • Hallo Lothar,

    wie gesagt, die Vorgehensweise in Classic ASP ist eine komplett andere als in ASP.NET (auch in WebForms).

    Du kannst nicht einfach mehr irgendwo eine Variable deklarieren und davon ausgehen, dass diese dann global zur Verfügung steht. Sowas gibt es nicht mehr.

    D.h. Du musst jedes Objekt erst einmal so instanzieren, dass es dir an den gewünschten Stellen zur Verfügung steht. Da das mitunter nicht immer einfach ist, neigt der Entwickler, der sich grade erst einarbeitet, gern dazu Shared bzw. static Eigenschaften, Variablen, ... zu verwenden, denn da braucht man - oh Wunder - keine Instanz der dazugehörigen Klasse, sondern kann sofort auf die Eigenschaft, Variable, Methode, ... zugreifen.

    Aber: Das ist in einer Umgebung wie ASP.NET gefährlich und führt fast immer zu erheblichen Problemen. Daher empfehle ich erstmal, weder Module (static class) noch Shared (static) zu vewenden, bis dir ganz klar geworden ist, was das eigentlich bedeutet.

    In deinem Fall willst Du ja irgendwo, irgendwie auf die Variable Land der Klasse Variablen zugreifen. Dafür musst Du dann eine Instanz der Klasse erstellen, bspw. in der index.aspx.

    Du greifst also nicht über <Klassenname>.<Eigenschaft>, sonder über <NameDerInstanzvariablen>.<Eigenschaft> zu.

    <Public|Private|Protected|...> MeineInstanz As New <Klassenname>()
    ... = MeineInstanz.<Eigenschaft>

    In deinem Fall also bspw. so:

    Public Class _Default
    
        Public Property InstanzVonVariablen As New Variablen()
    
        ...
    
    End Class

    In der .aspx Seite selbst kannst Du dann per:

    <% Response.Write( InstanzVonVariablen.Land ) %>

    die Ausgabe vornehmen.

    ---

    Aber das alles gehört zu den absoluten Basics, die Du dir leider erst einmal selbst beibringen musst.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport


    Donnerstag, 26. August 2021 16:49
    Moderator
  • Hallo Stefan,

    nochmals Danke für die Erklärungen. Werde es probieren.

    Gruss Lothar

    Donnerstag, 26. August 2021 18:21
  • Hallo Stefan,

    leider immer noch:  'InstanzVonVariablen' is not declared. It may be inaccessible due to its protection level.

    Ich glaube zu Wissen woran das liegt. index.aspx.vb ist zwar vorhanden, allerdings nicht im Projekt. Ich dachte index.aspx.vb wird automatisch mit kompiliert, da sie ja auch automatisch erstellt wurde, aber dem ist anscheinend nicht so. Auch kann ich diese nicht zum Projekt hinzufügen (hinzufügen - vorhandenes Element). Sie reagiert nicht. Ein neues Element kann ich hinzufügen, weis aber nicht welches und welche Bezeichnung es dann bekommt.

    Gruss Lothar

    Freitag, 27. August 2021 08:31
  • Hallo Stefan,

    index.aspx.vb wird doch kompiliert, aber es kommt ein Fehler, wenn ich z.B.:

    Public Class _Default

    Public Property InstanzVonVariablen As New Variablen()

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

    End Sub
    End Class

    eingebe. 

    Freitag, 27. August 2021 17:28
  • Hallo Lothar,

    wenn Du eine Fehlermeldung erhältst, poste diese bitte immer exakt und vollständig. Keine verkürzte oder eigeninterpretierte Fassung davon.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Samstag, 28. August 2021 12:33
    Moderator
  • Hallo Stefan,

    die Fehlermeldung lautet:

    "Fehler beim Erstellen. Möchten Sie den Vorgang fortsetzen und den letzten erfolgreichen Build ausführen?" und

    Schweregrad Code Beschreibung Projekt Datei Zeile Unterdrückungszustand
    Fehler BC30683 'Inherits-Anweisungen müssen vor allen Deklarationen in der Klasse stehen. camping C:\Users\Lothar\source\repos\camping\camping\index.aspx.vb 5 Aktiv

    meine index.aspx.vb:

    Public Class _Default

    Public Property MyVariablen As New Variablen()

    Inherits System.Web.UI.Page

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

    End Sub

    End Class 

    Hab schon sehr viel ohne Erfolg probiert!

    Gruss Lothar


    Sonntag, 29. August 2021 07:40
  • Hallo Stefan,

    wenn ich auf die Fehlermeldung reagiere und Inherits Page davor setze, bekomme ich zwar den Fehler weg, aber dafür 

     Compilerfehlermeldung: BC30451: 'MyVariablen' is not declared. It may be inaccessible due to its protection level.

     InstanzVonVariablen hab ich umbenannt!

    <% Response.Write(MyVariablen.Land) %>

    Sonntag, 29. August 2021 08:41
  • Hallo Stefan,

    hier noch mal eine Zusammenfassung:

    variablen.vb
    Public Class Variablen
        Dim Land As String = "DE"
    End Class

    index.aspx.vb
    Public Class _Default
    Inherits Page
    Public Property MyVariablen As New Variablen()
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
    End Sub
    End Class

    index.vb
    <% Response.Write(MyVariablen.Land) %>

    Gruss Lothar
    Montag, 30. August 2021 08:38
  • Hallo,

    es können sich selbstverständlich auch andere beteiligen. Der Fehler kommt immer noch!

    Gruss Lothar

    Mittwoch, 1. September 2021 10:03
  • Ich habe in Visual Studio 2019 ein WebApp-Projekt mit vb erstellt. Ich möchte Variablen erstellen, bekomme aber immer Variablen nicht deklariert. Was ich versucht habe:

    Ordner variablen.vb in App_Start erstellt mit folgendem Inhalt:

    Public Class Variablen
        Dim Laendercode As String = "DE"
    End Class

    index.aspx.vb mit folgendem Inhalt:

    Public Class _Default
    
    Public Property MyVariablen As New Variablen()
    
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    
    End Sub
    
    End Class

    index.aspx mit folgendem Inhalt:

    ...
    <% Response.Write(MyVariablen.Laendercode) %>
    ...


    Donnerstag, 2. September 2021 14:28
  • Hallo Lothar,

    wenn ich das nachstelle, klappt das problemlos.

    Wo genau liegt die Datei "Variablen.vb" bei dir? Im App_Start? Falls ja, dort hat die nichts zu suchen. Leg die Datei in den App_Code Ordner (wenn es den nicht gibt, leg ihn einfach an). Dann sollte das auch klappen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Donnerstag, 2. September 2021 20:29
    Moderator
  • Hallo Lothar,

    Ordner variablen.vb in App_Start erstellt
    Public Class Variablen
        Dim Laendercode As String = "DE"
    End Class

    Zum einen gehört die Datei, wie im anderen Thread schon erwähnt, nich tin den App_Start Ordner, sondern wenn überhaupt in den App_Code Ordner.

    Dann hast Du die Variable Laendercode mit Dim deklariert. Damit ist sie nur klassenintern verfügbar und nicht von außerhalb. Stell das um auf Public und am besten auch gleich als Eigenschaft. Also so:

    Public Property Laendercode As String = "DE"

    HTH


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Donnerstag, 2. September 2021 20:38
    Moderator
  • Hallo Stefan,

    danke für die Antwort. Bei mir gibt es den Ordner App_Code nicht, nur den Ordner App_Data. Soll ich den App_Code erstellen?

    Gruss Lothar
    Freitag, 3. September 2021 08:38
  • Hallo Lothar,

    Soll ich den App_Code erstellen?

    ja, das wäre wohl die sinnvollste Variante :)


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Freitag, 3. September 2021 08:58
    Moderator
  • Hallo Stefan,

    hab den Ordner erstellt, aber leider immer noch der Fehler beim Aufruf von:

    <% Response.Write(MyVariablen.Laendercode) %>

    Gruss Lothar

    Freitag, 3. September 2021 13:10
  • Hallo Lothar,

    dann kommen wir so leider nicht weiter.

    Stell dein Projekt mal bitte vollständig als Zip Download irgendwo zur Verfügung (Google Drive, OneDrive, ...). Dann kann man sich mal anschauen, was Du da eigentlich treibst.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Freitag, 3. September 2021 13:13
    Moderator
  • Hast Du ein ondrive-Konto, dann sag bitte die email dazu!
    Freitag, 3. September 2021 14:23
  • Hast Du ein ondrive-Konto, dann sag bitte die email dazu!

    Ähm. Du sollst das bitte auf deinem Onedrive, ... Speicher hochladen und dann bitte den Link hier posten.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Freitag, 3. September 2021 14:34
    Moderator
  • Hab ich hochgeladen, aber wo finde ich den Link?
    Freitag, 3. September 2021 14:44
  • Hallo Lothar,

    in deiner index.aspx fehlt die Deklaration der ASP.NET Zuordnung.

    <%@ Page Language="vb" AutoEventWireup="false" CodeBehind="index.aspx.vb" Inherits="camping._Default" %>
    

    Das muss in die allererste Zeile in der index.aspx (wie auch in der hauptseite.aspx, schau es dir einfach mal dort an. Datei- und Klassenname sind dort natürlich anders)

    Die drei Zeilen;

    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
    <link rel="stylesheet" media="all" href="content/site.css">
    <meta name="distribution" content="global">

    gehören zudem nicht vor <!DOCTYPE ...> sondern in den <head>...</head> Node.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Freitag, 3. September 2021 15:05
    Moderator
  • Danke, hab ich verändert. Was sind sonst noch für Fehler?
    Freitag, 3. September 2021 15:17
  • Danke, hab ich verändert. Was sind sonst noch für Fehler?

    Hallo Lothar,

    das musst Du schon selbst herausfinden. Das Forum ist nicht dafür da, deine Anwendung(en) durchzuschauen und dir alle eventuell irgendwo versteckten Fehler aufzuzeigen.

    Ich kann dich gerne auf Basis eines kostenpflichtigen Supports beim Aufbau und der Anpassung deiner Anwendung unterstützen. Im Forum gebe ich gerne Hilfestellung aber da musst Du zuerst mal die Vorarbeit leisten und bei konkreten Problemstellungen dann hier fragen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Freitag, 3. September 2021 15:21
    Moderator
  • Hallo Stefan,

    danke noch mal für Deine Fehlerbeseitigung. Ich möchte in erster Linie das meine Variablen laufen und ich darauf zugreifen kann.

    Gruss Lothar

    Freitag, 3. September 2021 15:33
  • Ich möchte in erster Linie das meine Variablen laufen und ich darauf zugreifen kann.

    Das sollte dann ja mit den Änderungen klappen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Freitag, 3. September 2021 15:59
    Moderator
  • Danke, das klappt!

    Gruss Lothar

    Freitag, 3. September 2021 16:44