Avatar billede trumf Nybegynder
25. januar 2006 - 22:31 Der er 24 kommentarer og
1 løsning

.net 2.0 og namespaces

Hejsa E

Hvad er nu det her .NET 2.0 for noget?

Nu er jeg endelig ved at fatte bare lidt af .NET 1 og så kommer der en toer og laver om på det hele...

Normalt har man et namespace, men det er væk i 2.0, i stedet har man partial klasser, men de duer da ikke til en dyt.

jeg har en masse funktioner jeg gerne vil kalde fra flere forskellige filer, og førhen har der heller ikke været noget bøvl med det, jeg har bare lavet en funktions klasse og kaldt den fra mine andre sider.
Functions f = new Functions();
int i = f.hentID();

Nu sker der ikke noget når jeg prøver at få fat i min funktions klasse, for de er ikke i samme namespace...

Når jeg så prøver at lave et namespace får jeg en fejl:

namespace qe
{
    public partial class Vin_vin : System.Web.UI.Page
    {

der kommer en bølge lige efter vin og nogle fejlmeddelser fra nogle underlige sider som ikke findes

Error    1    'ASP.vin_vin_aspx.GetTypeHashCode()': no suitable method found to override    c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\vgadm\5980e440\a316b967\App_Web_qmayu3qj.0.cs    767   

men også en fejl der henviser til ovenstående bølge:
Error    4    Make sure that the class defined in this code file matches the 'inherits' attribute, and that it extends the correct base class (e.g. Page or UserControl).

Kan nogen give mig en god forklaring på hvorfor der ikke er namespaces i 2.0 og hvordan jeg løser dette problem ?
Avatar billede hacked Nybegynder
25. januar 2006 - 22:43 #1
Der er namespaces i 2.0

Listing 2. A code-behind file in ASP.NET 2.0

namespace ASP {
public partial class MyPage : System.Web.UI.Page
{
}
}

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvs05/html/Internals.asp
Avatar billede driis Nybegynder
25. januar 2006 - 22:45 #2
Der er namespaces i 2.0, stol trygt på det.
Jeg har ikke set din fejl før, men et gæt er at du bruger "partial" keywordet på en klasse der ikke er partial. Prøv at fjerne det.

Partial er opfundet af MS for at kunne dele en klasse op over flere .cs filer og på den måde "skjule" det visual-designer-specifikke auto genererede kode for dig (hvilket de mener skulle gøre det mere simpelt - jeg hælder mest til det modsatte).

De underlige sider der ikke findes er i øvrigt ASP.NET's cache af dine .aspx filer.
Avatar billede dj Nybegynder
25. januar 2006 - 22:47 #3
Der er skam namespaces i .NET 2.0 og de fungerer på samme måde som i 1.x :)

Forskellen ligger i at VS som default anvender partial klasser til codebehind filer i VS2005 og at websider som udgangspunkt erklæres i et default namespace (grundet at man sjældent ønsker adgang til codebehinden for en side fra andre sider udenom et register tag og at hver side som standard kompileres enkeltvis).

Dit problem ligger derfor ikke i at du har erklæret et namespace for din klasse, dit problem er at du i din Page erklæring ikke inkluderer dette namespace i Inherits propertien og at din ASPX som konsekvens heraf ikke kan finde codebehind-erklæringen.

hvis du i din ASPX istedet skriver noget ala

<%@ Page CodeFile="Vin_vin.aspx.cs" Inherits="qe.Vin_vin" %>

Så burde det virke :)

Partial klasser er iøvrigt ganske praktiske, I det aktuelle tilfælde betyder det bl.a. at du automatisk har adgang til alle serverside controls erklæret i din aspx fra codebehinden (hvor du i 1.x skulle reerklære disse i codebehinden, omend VS ofte gjorde dette for en hvis man anvendte WYSIWYG funktionaliteten i VS)
Avatar billede Syska Mester
25. januar 2006 - 22:48 #4
"partial" betyder bare at du kan have din klasse delt udover flere filer....

Namespaces er der stadig, men bare ikke som defualt når du opretter et ny class fil, web form etc.

2'eren er 100000 gange bedre end 1'eren....
og asp.net endnu flere gange bedre.

// ouT
Avatar billede hacked Nybegynder
25. januar 2006 - 22:50 #5
Yderligere tyder din Error 4 på at der er en aspx der peger på en aspx.cs der ikke findes.
Avatar billede dj Nybegynder
25. januar 2006 - 22:52 #6
malkor: jeg vil umiddelbart gå ud fra at den fejlbesked kommer hvis man i Inherits propertien glemmer at angive namespacet - derfor jeg formoder at det blot er det der er galt :)
Avatar billede hacked Nybegynder
25. januar 2006 - 22:53 #7
Hehe dj - skrev min kommentar inden jeg så din :D sådan kan det gå.
Avatar billede hacked Nybegynder
25. januar 2006 - 22:54 #8
Det er også en mulighed ja :) men begge kan forekomme.
Avatar billede trumf Nybegynder
25. januar 2006 - 22:58 #9
dj har helt ret :)

Jeg vidste nu godt at der er namespaces i 2.0, men undrer mig over at de ikke auto generes når man opretter en ny side.

Jeg bruger visual web developer så det er måske en af dem der skal lokke til at investere i den fulde verion (VS)...
Avatar billede trumf Nybegynder
25. januar 2006 - 22:59 #10
Hvordan skal jeg fordele her, dj's beskrivelse løste fejlen, men her er jo så mange svar :)
Avatar billede dj Nybegynder
25. januar 2006 - 23:01 #11
trumf: Der bliver heller ikke auto-oprettet namespaces i størrer udgaver af VS, det skyldes ganske enkelt at MS har vurderet at det ikke giver specielt meget mening for ASPX/Codebehind relationer - har man behov for at tilgå kode i andre codebehind-filer end den der tilhører den aktuelle side så tyder det snarere på at man bør genoverveje sit kodedesign :)
Avatar billede dj Nybegynder
25. januar 2006 - 23:02 #12
trumf: bare fordel dem som du vil, det betyder ikke det store for mit vedkommende :)
Avatar billede trumf Nybegynder
25. januar 2006 - 23:05 #13
men hvordan skal jeg ellers få fat i de funktioner jeg har liggende i en seperat klassefil ?
Avatar billede dj Nybegynder
25. januar 2006 - 23:08 #14
tjah i 2.0 er der kommet en mulighed for at smide klassefiler i App_Code som automatisk refereres i dine sider.

Den løsning giver jeg dog personligt ikke meget for da jeg mener det også er udtryk for "dårligt design". Jeg foretrækker at oprette et library projekt i solutionen og referere den på traditionel vis.
Avatar billede trumf Nybegynder
25. januar 2006 - 23:16 #15
Det der class library er vist lidt for langhåret til mig lige nu, men den der app_code er måske værd at se nærmere på.

Har den noget at gøre med den mappe i mit projekt der heller app_data ?
Avatar billede trumf Nybegynder
25. januar 2006 - 23:16 #16
heller = hedder
Avatar billede dj Nybegynder
25. januar 2006 - 23:23 #17
Nej, den er som noget angiver til data, du kan bare oprette en ny mappe og kalde den "App_Code", VS finder selv ud af at der er tale om en såkaldt "speciel mappe".

At lave et library er dog ikke specielt meget sværere, du højreklikker bare på din solution og vælger Add -> New Project og angiver at det skal være et "Class library".
Så kan du så blot oprette klasser derunder og tildele dem et namespace.
Derefter skal du højreklikke på dit webprojekt og vælge "Add Reference" --> Project og så vælge dit class library i listen. Derefter har du så adgang til klasserne fra alle dine codebehind filer ved at erklære namespacet.
Avatar billede trumf Nybegynder
25. januar 2006 - 23:29 #18
Nåh nok om det, jeg må have fået slettet den mappe. Jeg har fået svar på mit spm, men jeg har desværre ikke fået adgang til til de funktioner jeg har lagt i den anden klasse fil, jeg prøver at tilgå dem som jeg plejer i 1.1, men det virker ikke, selvom de nu er i samme namespace.

hvordan får jeg adgang til funktionen GetTotalNumItems der ligger i filen Functions.cs fra vin.aspx.cs ?

namespace qe
{
    public class Functions
    {
        public Functions()
        {
            //
            // TODO: Add constructor logic here
            //

        }

        public int GetTotalNumItems(string SP, int dealerID)
        {
Avatar billede trumf Nybegynder
25. januar 2006 - 23:31 #19
sorry havde ikke lige set dit svar, se bare bort fra mit forrige post, jeg prøver din løsning (i morgen)

Takker til alle for hjælpen :)
Avatar billede trumf Nybegynder
25. januar 2006 - 23:34 #20
hvis du er lige så god til delegates, så er du velkommen til at se på mit forrige spm, for den driller godt nok...
Avatar billede dj Nybegynder
25. januar 2006 - 23:53 #21
Jeg er kommet med et lille bud på hvad problemet kan skyldes, omend jeg næsten vil tro du har checket det, men vil bare lige være sikker inden jeg kigger nærmere på det :)
Avatar billede trumf Nybegynder
26. januar 2006 - 14:26 #22
Klasse biblioteker er ikke understøttet i visual web developer, der skal man have en fuld version http://msdn.microsoft.com/vstudio/products/compare/
Jeg har kigget på en standard den koster bare 2600,- http://www.edbpriser.dk/Listprices.asp?ID=177636
Jeg ved ikke om jeg vil investere i den, for jeg får nok alligevel en af mit arbejde når vi går over til 2005, hvilket vel ikke kan tage så lang tid endnu...

App_Code kan oprettes ved at højreklikke på projektet, så jeg giver den en chance...
Avatar billede dj Nybegynder
26. januar 2006 - 15:32 #23
ah ok, den begrænsning var jeg faktisk ikke klar over.

Godt vi er overgået til VS2005 :-)
Avatar billede trumf Nybegynder
26. januar 2006 - 16:41 #24
Undskyld hvis jeg snylter på dette spm, men nu hvor jeg har din opmærksomhed, så er der altså bøvl med den App_Code (som du godt nok heller ikke anbefaler)
I følge dette ex: http://msdn2.microsoft.com/library/we4hy2z9.aspx som man må mene skulle være rigtigt, har jeg lavet mit helt magen til, men det virker bare ikke, kan du evt lige se hvad jeg måske overser.

min klasse i App_Code:
public class Constants
{
    public int numResult = 30;
}

På siden hvor jeg kalder den:
public partial class brugere_medlemmer : System.Web.UI.Page
{
    Constants cnt = new Constants();
    int numResult = cnt.numResult;
Der er bølge under nederste cnt og en fejl:
A field initializer cannot reference the nonstatic field, method, or property 'brugere_medlemmer.cnt'
Constants er grønne så vwd kan godt se klassen, men åbenbart ikke den instans jeg lige har oprettet!!!
Avatar billede trumf Nybegynder
26. januar 2006 - 17:43 #25
Ahh den skulle bare kaldes inden i en funktion!!!  det vidste jeg jo egentligt godt :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester