webForumDet fria alternativet

Mitt första ASP.NET-projekt

.NET

15 svar · 612 visningar · startad av Web-Tor

Medlem sedan nov. 200013 890 inlägg
Frågan#1

Tjena

Jag har knåpat ihop min första ASP.NET-applikation och skulle vilja få lite konstruktiv kritik. Det är en mycket enkel gästbok skriven i C# (code-behind) och MySQL.

Jag har klippt och klistrat från alla möjliga ställen så det kan säkert finnas en hel del onödig kod.

Alla åsikter är välkomna (men bry er inte om designen)!

Jag har några specifika frågor:
1. Hur gör jag för att för att mata in variabeln name i databasen i stället för fltName.Text i min INSERT-fråga?

2. När jag växlar mellan Design och HTML-vyn på en .aspx-sida så försvinner / i slutet av den här taggen:

<link rel="stylesheet" href="StyleSheet.css" />

Jag har testat att ändra precis allt under Tools » Options... men det spelar ingen roll.

3. När jag skapade projektet skapades en Global.asax-fil men den kan jag inte ha i mappen. Då får jag följande felmeddelande:
Could not load type 'NETtest.Global'
Koden ser ut så här:

<%@ Application Codebehind="Global.asax.cs" Inherits="NETtest.Global" %>

Jag har zippat ihop hela projektet och databasen ser ut så här:

CREATE TABLE test (
   colID smallint(4) NOT NULL auto_increment,
   colName varchar(30) NOT NULL,
   colText text NOT NULL,
   PRIMARY KEY (colID)
);
Medlem sedan juni 20011 732 inlägg
#2
  1. Det är bara att skicka in variabeln
"INSERT INTO test (colName, colText) VALUES ('"+ variabel1 +"', '"+ variabel2 +"')")
  1. Tror inte den taggen behöver avslutas (jag ser att jag själv kör utan, har inte tänkt på det tidigare). Även meta-taggarna som ligger mellan head avslutas aldrig. Känns inte så "xhtml-riktigt" men det finns säkert någon dålig förklaring...

  2. Har du kompilerat applikationen?? Du verkar inte ha byggt din assembly?

Slutligen kan jag väl säga att det ser bra ut, förutom i pageloaden där du endast bör köra Show_Guestbook(); när det inte är en postback. Annars gör du två hämtningar av gästboken när du kör din insert-funktion.

private void Page_Load(object sender, System.EventArgs e) {
  if(!IsPostBack)   
    Show_Guestbook();
}
Medlem sedan nov. 200013 890 inlägg
#3

Tack så mycket Network!
1. Ska testa det.
2. Jag vill koda enligt XHTML och då måste alla taggar avslutas. ;)
3. Bra att du frågade för det där med kompilering har jag funderat över. Jag antar att det är build som man ska välja? När jag gör det så får jag en del fel:

using Microsoft.Data.Odbc;

Här klagar den på att det inte går att hitta Data? Men Microsoft.Data.Odbc.dll ligger i bin-katalogen.

Sedan gnäller den på att jag använda span-taggar på vissa ställer (trots att det är korrekt XHTML-kod)?

Du (eller nån annan) får gärna förklara hur själva kompileringen ska gå till och varför man gör den.

PS. Såg att du jobbar på ComIT – min morsa jobbar på Rejlers. :)

Medlem sedan mars 200262 inlägg
#4

Storkök va?

Medlem sedan juni 20011 732 inlägg
#5

Du använder MySQL? Det finns ett bra inlägg här på wf just om hur du får igång din mysql-databas tillsammans med .net.

http://www.webforum.nu/showthread.php?s=&threadid=47344&highlight=mysql

Kompilering (build) ja, det blir nog svårt att få igång applikationen om du inte kompilerar den! Gamla asp (och många andra tekniker) är ju interpreterande scriptspråk, där sker kompilering varje gång någon exekverar sidan... nu kompilerar du din applikation till en assembly (dll) i utvecklingsfasen, när du sedan är i runtime ligger hela applikationen i serverns minne vilket ger ett stabilare, säkrare och inte minst snabbare program. De kodfiler du har (.cs) används endast vid kompilering, dessa ska du således överhuvudtaget inte lägga i din root.

När du får ordning på din mysql-koppling så kommer den antagligen inte att gnälla över dina span-taggar.

Hälsa Karin! :)

Medlem sedan nov. 200013 890 inlägg
#6

Jo, jag använder MySQL och har fått stor hjälp av tråden du länkade till. Grejen är att applikationen funkar fint (databaskoppling och allt :o). Det enda som strular är global.asax-filen.

När jag väljer Build så får jag upp några fel och så får jag frågan om jag vill fortsätta, vad ska jag svara? Är applikationen kompilerad då eller måste jag rätta till alla fel?

De kodfiler du har (.cs) används endast vid kompilering, dessa ska du således överhuvudtaget inte lägga i din root.

Aha! Det är sånt som är bra att veta. Dom behövs alltså inte för att aspx-sidan ska funka?

Jag har i huvudsak jobbat med PHP tidigare och det är ganska stora skillnader mot ASP.NET.
Det påminner mer om JSP (rätta mig om jag har fel).

Hälsa Karin!

I´m impressed :o

Medlem sedan juni 20011 732 inlägg
#7

Hm, du har en fil som heter org_Global.asax? Har du döpt om den? Den ska nog heta bara Global.asax

När jag väljer Build så får jag upp några fel och så får jag frågan om jag vill fortsätta, vad ska jag svara? Är applikationen kompilerad då eller måste jag rätta till alla fel?

Om du får "errors" stannar kompilatorn. Om du får "warnings" kompilerar den, därmed inte sagt att man inte ska göra något åt sina warnings. :)

Aha! Det är sånt som är bra att veta. Dom behövs alltså inte för att aspx-sidan ska funka?

All logik ligger i din assembly/dina assemblys, dvs de dll-filer som ligger i din bin-katalog... dessa laddas första gången applikationen exekveras, sedan har du dem i datorns ram. Precis som en vanlig winapplikation alltså.

Med andra ord, du behöver inte (du ska inte) lägga dina kodfiiler i rooten (lika lite som du behöver källkoden för att kunna köra photoshop eller ditt favoritspel. :) ). Men så länge det är ett utvecklingsprojekt som du kör lokalt så spelar det naturligtvis ingen roll, nu pratar vi den dagen du går skarpt med din jätteseriösa webbshop alltså!

Och ja, visst finns det likheter med Java... c# kallas ju för övrigt "microsofts eget java". Men det finns olikheter också... :)

Medlem sedan nov. 200013 890 inlägg
#8

Hm, du har en fil som heter org_Global.asax? Har du döpt om den? Den ska nog heta bara Global.asax

Jo, jag döpte om den just för att det inte gick att köra sidan annars. Så fort jag döper om den till Global.asax så får jag felet:
<%@ Application Codebehind="Global.asax.cs" Inherits="NETtest.Global" %>

Under Build-menyn så finns det ju flera val. Vilket ska jag välja?
Om jag väljer Build NETtest så får jag följande fel (Errors):

C:\Inetpub\wwwroot\NETtest\default.aspx.cs(10): The type or namespace name 'Data' does not exist in the class or namespace 'Microsoft' (are you missing an assembly reference?)
Rad 10 är:
using Microsoft.Data.Odbc;

och det andra felet är

C:\Inetpub\wwwroot\NETtest\default.aspx.cs(30): The type or namespace name 'OdbcConnection' could not be found (are you missing a using directive or an assembly reference?)
Rad 30 är:
OdbcConnection myConn;

Hur åtgärdar jag dom här felen :q

Medlem sedan juni 20011 732 inlägg
#9

Eftersom du använder en "utomstående" komponent måste du lägga till en referens till den (Microsoft.Data.Odbc). Referenserna hittar du i din Solution Explorer i vs.net... högerklicka och välj "add reference" och leta fram dll-filen.

Medlem sedan nov. 200013 890 inlägg
#10

Jag har lagt till en referens till Microsoft.Data.Odbc och nu går det att kompilera koden utan problem. Tack NETwork! :)

Det skapas en dll-fil i min bin-katalog men när jag kör defalt.aspx-sidan får jag det här söta felmeddelandet:

[b]Compiler Error Message:[/b] CS1595: 'NETtest.Guestbook' is defined in multiple places;
using definition from 'C:\WINDOWS\Microsoft.NET\Framework\v1.0.3705
\Temporary ASP.NET Files\nettest\6a105603\3a57d147\xndisfq5.dll'

Tar jag däremot bort dll-filen (och Global.asax) så funkar det. :q
Hur ska jag göra för att kunna köra dll-filen?

En lite fråga till: Det måste finnas nåt smidigare sätt att koppla upp mot databasen, så att jag bara behöver ange användarnamn, lösenord och sånt mer än en gång?

Medlem sedan juni 20011 732 inlägg
#11

Jag vet inte riktigt vad du har lyckats med, enklast är nog att du börjar om från början och skapar ett nytt projekt och sedan kopierar över koden. :)

Det finns en mängd olika sätt att hantera din uppkoppling mot databasen - du har ett riktigt objektorienterat programmeringsspråk att leka med! Här har du en jättetråd som tar upp en hel del tankar kring detta (det finns även många andra trådar i ämnet). Den är dock ganska avancerad, ska du göra en gästbok och lite annat kanske du inte behöver sjuttielva affärslager... ;) Lär dig använda klasser iaf, det är väldigt smidigt när man väl behärskar det!

http://www.webforum.nu/showthread.php?s=&threadid=61076

Medlem sedan nov. 200013 890 inlägg
#12

Jo, jag var inne på att göra om projektet.
Men när jag kompilerat och fått min dll-fil så skrev du att jag kunde ta bort min cs-filer. Men mina aspx-filer måste jag väll ha kvar? Finns det några andra filer som inte behövs?

Medlem sedan juni 20011 732 inlägg
#13

Nja, alltså... dina kodfiler används vid kompilering, du kan inte ta bort dem på din utvecklingsserver/katalog (då kan du ju inte kompilera igen!). Det är när du ska lägga upp dina filer "skarpt" på en webbserver som du inte behöver dem, de används inte i runtime (då ligger all logik i dina dll-filer).

Resx-filerna kan du ta bort (resursfiler) men dina aspx-dokument måste du förstås ha på servern. Du kan ladda upp "rätt" filer direkt från vs.net så du bara får med de som används.

Medlem sedan nov. 200013 890 inlägg
#14

Jag skapade ett nytt projekt och kopierade koden och nu funkar hela köret.

Efter att det att jag samspråkat med min hjärna förstår jag nu vilka filer som behövs och inte. ;)

En grej bara...
När jag kompilerat dethela så hämtas ju koden från dll-filen i ställer för cs-filerna men det blir lite jobbigt att hålla på att kompilera hela tiden så fort man gör en liten ändring. Och om jag inte kompilerar (och gömmer min dll-fil) så får jag jag ju en massa felmeddelanden hela tiden.
Hur går jag för att slippa felmeddelanden under tiden jag utvecklar sidan?

Medlem sedan mars 20002 836 inlägg
#15

du har en site för utveckling en annan som kör "färdiga" delar (den skarpa siten)

cya,
PatrikB

Medlem sedan juni 20011 732 inlägg
#16

Web-Tor skrev:

När jag kompilerat dethela så hämtas ju koden från dll-filen i ställer för cs-filerna men det blir lite jobbigt att hålla på att kompilera hela tiden så fort man gör en liten ändring. Och om jag inte kompilerar (och gömmer min dll-fil) så får jag jag ju en massa felmeddelanden hela tiden.
Hur går jag för att slippa felmeddelanden under tiden jag utvecklar sidan?

Det går inte. Varje gång du gör en ändring i din kod och vill köra den nya koden måste du kompilera. Däremot behöver du naturligtvis inte kompilera om du gör ändringar i ditt aspx-dokument. Vet inte riktigt vad du menar med att du "gömmer din dll" men så länge du inte kompilerar koden är det den senast kompilerade assemblyn som är aktiv och om den fungerade så är applikationen igång!

Kompilering får du leva med, men det är inget man tänker på efter ett tag... och fördelarna i jämförelse med ett interpreterande språk är ju hyfsat stora. :)

286 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
152 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
152 ms — ändringar (db)