[asp.net] methods aanroepen in andere class *

Pagina: 1
Acties:
  • 444 views sinds 30-01-2008
  • Reageer

  • MikevanEngelen
  • Registratie: Mei 2001
  • Laatst online: 22-05 14:39
Ik programmeer ongeveer 3 jaar in vb.net nu, en moet nu vanwege een stage opdracht een asp.net pagina schrijven. Opzicht is het goed te doen, omdat veel van het programmeer werk natuurlijk gewoon vb.net code is.

Echter ik loop tegen een probleem aan, in vb.net kan je een module aanmaken in Visual Studio en dan wanneer je een procedure nodig hebt module.procedurenaam() en je kan dan de procedure gebruiken.
Dit werkt dus niet in ASP.NET, en heb gekeken met google en ASP.NET sites maar kan nergens vinden wat ik precies wil.

Je hebt de standaard <% -- #include PathType = bestand.aspx -- > die bedoelt is voor html, maar ik heb begrepen dat deze uit het ASP 2.0 (non .net) tijdperk afstamt, tevens werkt het ook niet in visual studio ik wil me debugger kunnen gebruiken namelijk met intellisense.

Kan iemand mij vertellen hoe dit precies werkt, en hoe ik dit kan oplossen ?
Hetzelde voor het verhaal van hoe je precies www.domeinnaam.nl/i.aspx?menu=true hoe dat werkt, want ook dat is mij niet duidelijk.
Ik heb ook zo'n ASP.NET boek hier, maar daar heb ik zo'n me vraagtekens bij.

Alvast bedankt ik iedergeval !

Verwijderd

Modules stammen nog af van de oude vb, deze zou ik dus achterwegen laten. Als alternatief kan je een gewone class gebruiken. In je web project doe je achtereenvolgens: add > add new item >> Class. Hierin maak je dan een methode die je kan oproepen alsvolgt: klassenaam.methodenaam bij een statische methode.

Over dat vraagje met pagina.aspx?menu=true. Dit zijn parameters in de url, beter bekend als een querystring. je kan deze opvangen door
code:
1
dim str as string = Request.QuerySTring("menu")

Vervolgens kan jeje menucontrol bijvoorbeeld enablen of disablen naar gelang
Of je kan met usercontrols werken die je dynamisch laadt: pagina.aspx?pagina=mijnusercontrol.

Deze kan je dynamisch laden mbv loadcontrol("mijncontrol.ascx")

  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

.NET werkt met assemblies dus je zou daar eens naar kunnen kijken. Het is wel ff lastig om dit goed op de webserver te krijgen (naar mijn ervaring). Maar het werkt op zicht wel.

Nu met Land Rover Series 3 en Defender 90


  • MikevanEngelen
  • Registratie: Mei 2001
  • Laatst online: 22-05 14:39
Mwa ik wil zo makkelijk mogelijk, maar wel slim programmeren.
Ik heb het geprobeerd met die classes maar helemaal lekker wil het niet lukken :(

Heb een class aangemaakt via rechtsmuisknop op me solutionnaam en dan toevoegen, en dan een class aangeklikt. Nu staat er in de code (heb wat code gemaakt)
code:
1
2
3
4
5
6
7
8
9
10
11
12
Public Class Class1
    Dim ja As Boolean
    Dim ok As String

    Public Sub jan()
        If ja = True Then
            ok = "da's waar"
        Else
            ok = "foutje bedankt"
        End If
    End Sub
End Class


Daarna heb ik in een "codebehind" file wat code getypt om te kijken of ik die class nu kan aanspreken dus ik doe het volgende:

code:
1
2
3
4
5
6
Partial Class Default_aspx
    Public Sub gabber()
        Class1.jan()

    End Sub
End Class


Toch onderstereept hij dat "Class1.jan()". Dus gewoon geprobeerd (VS.net maakt ook nog wel eens foutjes), maar ook de compiler geeft een foutmelding dat het niet is gedeclareerd.
En dit is dus precies wat ik bedoelde, ik heb wel een aantal dingen geprobeerd. Heeft een van jullie nog suggesties.

Toch jammer dat zo iets simpels niet kan werken, maarre over die modules het werd mij op school nog zo geleerd :S
Trouwens bedankt, die query string werkt wel dus dan kan ik ook daar netjes mee aan de gang

[ Voor 12% gewijzigd door MikevanEngelen op 25-08-2004 15:09 ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 06:53

gorgi_19

Kruimeltjes zijn weer op :9

Je hebt geen instantie van Class1 gemaakt

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 23-05 16:52
Je moet zoals gorgi_19 zegt idd eerst een instance van Class1 maken.
Blijkbaar ontbreekt het je toch nog aan de basics van OOP, iets wat me wel verbaasd als je al 2 jaar in VB.NET geprogged hebt..

https://fgheysels.github.io/


  • MikevanEngelen
  • Registratie: Mei 2001
  • Laatst online: 22-05 14:39
Ik programmeer nu 2 jaar op school af en toe voor een project en het is voornamelijk een hobby.
Dat ik nu tegen problemen aanloop tegen dingen die ik heb geleerd bij mij op school is iets wat ik mezelf niet kwalijk neem, echter het lijkt me dat dit kleine stukje basiscode, gewoon een procedure die in een andere page/form moet werken toch geen problemen moet opleveren.

Ik hoop dat het duidelijk is, is dat ik geen programmeur ben... Ik ga wel kijken nu naar een instance kijken hoe dat werkt. Want ik wil overzichtelijk programmeren, en als ik al die code in een file moet gaan programmeren, zie ik dat niet zo zitten.

  • whoami
  • Registratie: December 2000
  • Laatst online: 23-05 16:52
Hmm, ik denk dat je eerst eens even de basics van OOP moet doornemen.

Je hebt een class, en een class kan je beschouwen als een 'blueprint'. Van die class kan je objecten (instances) instantieren. Je hebt dan een object die aan die 'blueprint' voldoet.

Jij hebt bv. een class Class1. Op zich kan je daar niets mee doen (tenzij je static methods/fields hebtt in die class, maar dat doet er nu niet toe). Van die class moet je dus een object instantieren.
In C# doe je dat zo:
code:
1
Class1 mijnObject = new Class1();

mijnObject is nu een instance van Class1. De methods en (public) fields die je nu in Class1 gedefinieerd hebt, kan je nu benaderen dmv mijnObject:
code:
1
2
mijnObject.ja = true;
mijnObject.jan();

[ Voor 4% gewijzigd door whoami op 25-08-2004 15:25 ]

https://fgheysels.github.io/


  • 6K
  • Registratie: September 2002
  • Laatst online: 19-01-2025

6K

is ook zo...

mjuh, ik ben het wel helemaal met whoami eens. Naar alle waarschijnlijkheid ga je tegen wel meer problemen aanlopen wanneer de code wat uitgebreider/complexer wordt, basis OOP is zeker aan te raden.
VB.Net doet dit overigens ook, dus daar zal het onderhuids toch wel gebeuren op de 1 of andere manier.

(heb net 70-316 gehaald, daarin zag ik wel dat je in VB toch wat meer kado krijgt dan bij C# :( )

٩(͡๏̯͡๏)۶ ٩(●̮̮̃•̃)۶


  • MikevanEngelen
  • Registratie: Mei 2001
  • Laatst online: 22-05 14:39
ik heb inmiddels de oplossing gevonden
code:
1
2
3
4
5
6
7
8
9
Imports Microsoft.VisualBasic

Public Class moduletest

    Public Shared Function aap() As String
        Console.Write("blaat")
    End Function

End Class


en dan in een ander form aanspreken op de oude vertrouwde manier

code:
1
    moduletest.aap()


Ik heb in iedergeval 2 extra boeken bestelt bij bol.cum, zodat ik meer inzicht krijg in ASP.NET (icm VB.net) & OOP. (een echte afrader is trouwens Sams ASP.NET "in 24 uur", voornamelijk zeer slecht vertaalt)

- Sams Teach Yourself ASP.Net in 21 Days with CDROM
- ASP.Net Unleashed

In ieder geval bedankt voor het antwoorden allemaal, en de hulp

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
MikevanEngelen schreef op 26 augustus 2004 @ 11:33:
ik heb inmiddels de oplossing gevonden
code:
1
2
3
4
5
6
7
8
9
Imports Microsoft.VisualBasic

Public Class moduletest

    Public Shared Function aap() As String
        Console.Write("blaat")
    End Function

End Class


en dan in een ander form aanspreken op de oude vertrouwde manier
Ik weet niet precies wat je Methode doet, maar waarschijnlijk is het niet echt een mooie manier waarop je het doet. Als je bijvoorbeeld een methode hebt die dingen doet afhankelijk van zijn data kan je beter instances maken, dan kan je tenmiste verschillende data naast elkaar hebben. Bijvoorbeeld bij een User met een PrintNaam Functie. Als je die static maakt kan je maar 1 user over je hele applicatie hebben. Het lijkt me dat je wel meerdere Users tegelijk van je applicatie gebruik wilt laten maken. Dan zou je bijvoorbeeld hetvolgende doen
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class User
{
    private string _naam;
    public User( string naam )
    {
        _naam = naam;
    }

    public void PrintNaam()
    {
        System.out.WriteLine( _naam );
    }
}

User jantje = new User( "Jantje" );
User piet = new User( "Piet" );

jantje.PrintNaam();
piet.PrintNaam();

Als je die Method static ( In VB "Shared" ) zou maken kan je niet meer op deze manier werken.

[ Voor 22% gewijzigd door Woy op 26-08-2004 12:27 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • MikevanEngelen
  • Registratie: Mei 2001
  • Laatst online: 22-05 14:39
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Class User
    Private _naam As String
    Public  Sub New(ByVal naam As String)
        _naam = naam
    End Sub
 
    Public  Sub PrintNaam()
        System..WriteLine(_naam)
    End Sub
End Class
 
Dim jantje As User =  New User("Jantje") 
Dim piet As User =  New User("Piet") 
 
jantje.PrintNaam()
piet.PrintNaam()


Ok, maar dit blijft binnen het zelfde form. Het is juist, wat ik bedoel, is dat je tussen de pages/forms uitwisseld. Zoals de module deed of doet in vb.net...

Bovendien is het project waar ik aan bezig ga, niet zo ingewikkeld qua programmeren, het zijn voornamelijk database functies (cms) en juist die plaats ik normaal gesproken in een "module" in vb.net!

[ Voor 23% gewijzigd door MikevanEngelen op 26-08-2004 13:13 ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 06:53

gorgi_19

Kruimeltjes zijn weer op :9

Ok, maar dit blijft binnen het zelfde form. Het is juist, wat ik bedoel, is dat je tussen de pages/forms uitwisseld
En dat zou met classes niet kunnen? :?
Bovendien is het project waar ik aan bezig ga, niet zo ingewikkeld qua programmeren, het zijn voornamelijk database functies en juist die plaats ik normaal gesproken in een "module" in vb.net!
Mja, je doet redelijk je best om er een bende van te maken :) Ook voor CRUD-statemements kan je het wel netjes houden; desnoods zelfs netjes via een N-tier opzet icm een abstract factory :)

Anyway, lees eens iets over de gedachtengang van vb.net en het gebruik van OO; ik denk namelijk dat je deze basis een beetje mist :)

[ Voor 65% gewijzigd door gorgi_19 op 26-08-2004 13:15 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • MikevanEngelen
  • Registratie: Mei 2001
  • Laatst online: 22-05 14:39
Ik weet niet, dat vraag ik aan jullie... Want dat gedeelte met die "shared" classes snap ik momenteel gewoon niet. Hoe je een klasse kan aanspreken in page y, welke in page x geschreven staat.
Maar zoals gezegt, ik heb extra boeken besteld die ga ik grondig doorlezen en hoop dat die mij wat meer informatie geven over dit onderwerp.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 06:53

gorgi_19

Kruimeltjes zijn weer op :9

MikevanEngelen schreef op 26 augustus 2004 @ 13:15:
Ik weet niet, dat vraag ik aan jullie... Want dat gedeelte met die "shared" classes snap ik momenteel gewoon niet. Hoe je een klasse kan aanspreken in page y, welke in page x geschreven staat.
Simpel, niet in webforms. Daar heb je Sessions of vergelijkbaars voor nodig als je met meerdere webforms werkt. Wil je het in deze webform houden, maar evt. meerdere usercontrols, dan kan je de HttpContext gebruiken.

Wil je geen data uitwisselen, dan maak je gewoon een apart .vb bestand waarin je bijvoorbeeld die class zet en daar maak je een instantie van op je pagina's. Wil je het echt doen wat jij wilt, dan maak je een instantie aan van de class van pagina X op pagina y, dus iets als
Visual Basic .NET:
1
2
Dim __otherPage as PageX = new PageX
__otherPage.MethodOmUitTeVoeren()

[ Voor 29% gewijzigd door gorgi_19 op 26-08-2004 13:19 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • MikevanEngelen
  • Registratie: Mei 2001
  • Laatst online: 22-05 14:39
gorgi_19 schreef op 26 augustus 2004 @ 13:13:

[...]

Mja, je doet redelijk je best om er een bende van te maken :) Ook voor CRUD-statemements kan je het wel netjes houden; desnoods zelfs netjes via een N-tier opzet icm een abstract factory :)

Anyway, lees eens iets over de gedachtengang van vb.net en het gebruik van OO; ik denk namelijk dat je deze basis een beetje mist :)
Thsa, ik heb juist geleerd dat modules gebruiken het overzichtelijk en netjes maken. Dat je uberhaupt meerdere classes in een form kan plaatsen wist ik sowiezo al niet.

Echter, wat me opvalt en ik merk dat ik me daaraan erger is dat jullie waarschijnlijk programmeurs zijn. Alles wat iemand doet die puur voor zijn hobby wat programmeerd op school [en daar dus schijnbaar, totaal de verkeerde stof heeft geleerd gekregen], in jullie ogen totaal verkeerd is.
Ik moet zeggen dat het niet bepaald stimuleerd om een vraag hier te stellen. Zoals gezegt heb ik extra referentie matriaal bestelt waarvan ik hoop dat het dit onderdeel uitlegt. Maar ik heb op geprobeerd op te zoeken op diverse tutorial sites hoe dit in mekaar zit, echter ik heb het niet gevonden. Heeft een van jullie anders een goede referentie die ik kan doorlezen zodat ik beter snap wat jullie bedoelen.

Wat ik hiermee bedoel te zeggen is: wat voor mij makkelijk is, is voor jullie de simpelste zaak van de wereld. Houd dat een beetje in je achterhoofd als je antwoord.

In ieder geval bedankt voor het antwoorden.

  • MikevanEngelen
  • Registratie: Mei 2001
  • Laatst online: 22-05 14:39
gorgi_19 schreef op 26 augustus 2004 @ 13:17:
[...]

Simpel, niet in webforms. Daar heb je Sessions of vergelijkbaars voor nodig als je met meerdere webforms werkt. Wil je het in deze webform houden, maar evt. meerdere usercontrols, dan kan je de HttpContext gebruiken.

Wil je geen data uitwisselen, dan maak je gewoon een apart .vb bestand waarin je bijvoorbeeld die class zet en daar maak je een instantie van op je pagina's. Wil je het echt doen wat jij wilt, dan maak je een instantie aan van de class van pagina X op pagina y, dus iets als
Visual Basic .NET:
1
2
Dim __otherPage as PageX = new PageX
__otherPage.MethodOmUitTeVoeren()
bedankt dit is een antwoord waar ik iets mee kan ! en ga dit zeker verder onderzoeken.

[ Voor 3% gewijzigd door MikevanEngelen op 26-08-2004 13:25 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 23-05 16:52
MikevanEngelen schreef op 26 augustus 2004 @ 13:21:
[...]


Thsa, ik heb juist geleerd dat modules gebruiken het overzichtelijk en netjes maken. Dat je uberhaupt meerdere classes in een form kan plaatsen wist ik sowiezo al niet.

Echter, wat me opvalt en ik merk dat ik me daaraan erger is dat jullie waarschijnlijk programmeurs zijn. Alles wat iemand doet die puur voor zijn hobby wat programmeerd op school [en daar dus schijnbaar, totaal de verkeerde stof heeft geleerd gekregen], in jullie ogen totaal verkeerd is.
Ik moet zeggen dat het niet bepaald stimuleerd om een vraag hier te stellen.
Hmm, ik denk dat je nu wel te hard van stapel loopt hoor.
Je methode die je hier aangetoond hebt, is idd niet de beste/goede, maar we reiken je tips aan en zeggen hoe je het wel beter kan doen. Waarom daar gefrustreerd van raken?

https://fgheysels.github.io/


Verwijderd

whoami schreef op 26 augustus 2004 @ 13:52:
[...]

Hmm, ik denk dat je nu wel te hard van stapel loopt hoor.
Je methode die je hier aangetoond hebt, is idd niet de beste/goede, maar we reiken je tips aan en zeggen hoe je het wel beter kan doen. Waarom daar gefrustreerd van raken?
whoami,
laten we er proberen voor te zorgen dat starters hier ook niet verloren lopen. Het doel van de TS was met beetje vb ervaring hoe te beginnen aan webforms. OOP is inderdaad hoe het moet, maar voor veel hobbyisten is dat gewoon zelfs te hoog gegrepen, zeker abstract factory en andere leuke patronen 8) . Daarmee heb ik hem (TS) deze morgen wat op weg geholpen met shared methodes. Dat dit niet dé beste manier is weet een kind, maar je moet ergens beginnen, niet waar?
In ieder geval, ik ben blij dat we de TS toch hebben kunnen helpen en dit topic niet zomaar is gesloten.

  • whoami
  • Registratie: December 2000
  • Laatst online: 23-05 16:52
Abstract factory, patterns, ... is inderdaad iets waar je je als beginner helemaal geen zorgen hoeft over te maken. Ik heb het er dan ook nog niet over gehad. ;)
Echter, als de TS zegt dat hij al 2 jaar in VB.NET geprogged heeft, dan ga ik ervan uit dat je toch wel de basics van object oriented programming kent, wat hier het geval niet is (no offence trouwens).
Daarom heb ik ook in een korte post snel wat uitleg gegeven over OO / classes / objecten, en ik denk dat dit ook hetgeen is waar de topicstarter wat kennis zal moeten over opdoen (en ook nog niets met static/shared dingen gaan doen).
Dat de topicstarter een aantal boeken heeft aangekocht om bij te leren siert hem, maar ik denk dat hij zich toch beter eerst wat in object oriented programming verdiept alvorens met ASP.NET verder te gaan.

https://fgheysels.github.io/


  • 6K
  • Registratie: September 2002
  • Laatst online: 19-01-2025

6K

is ook zo...

een leuke tip is het asp.net boek van MS press :) flauw misschien, maar voor een basis echt wel aardig vind ik zelf

٩(͡๏̯͡๏)۶ ٩(●̮̮̃•̃)۶


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Ik denk dat het inderdaad handig is om eerst eens een gewoon (VB).NET boek te bestuderen. Als je dat eenmaal begrijpt zal je ook beter begrijpen hoe ASP.NET inelkaar steekt en hoe je op een goede gestructureerde manier web applicaties in elkaar kan zetten.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”

Pagina: 1