webForumDet fria alternativet

migration

4 svar · 306 visningar · startad av Crim

CrimMedlem sedan juni 200233 inlägg
#1

Försöker migrera från ASP till ASP.net och har läst allt jag kommit över på Internet men det finns ett par frågetecken som nån här kanske kan hjälpa mig med. Inom OOP så skall man ju bl.a. ha lager och då har jag, när jag lekt lite, kört på 3 lager. Det första lagret är databasen, mssql. Det andra lagret tar emot ett id och hämtar de värden som skall hämtas via en stored procedure, lägger in dem i en dataview och returnerar den. Det yttersta lagret tar emot dataviewen och binder den till en repeater. Låter det vettigt eller?

Nu till den riktiga frågan :e Jag har en asp-sida som ser ut så här . Kan posta koden om det behövs men det är supersimpel asp så jag tror inte det behövs. Hur ska man göra detta i asp.net? Jag antar att man skall använda en repeater. Men var skall jag lägga if-satserna? I mitt första försök så skapade jag en funktion i asp.net sidan (dvs det yttersta lagret) som tog emot värdena (Container...) och "byggde upp" rätt htmlkod och returnerade htmlen. Och det verkade fungera. Men jag är lite orolig för att jag färgas av mitt gamla asp-kunnande. Är det så man skall göra i asp.net eller är jag ute och cyklar?

Problem nr2 uppstod när jag försökte lägga till en asp:Button. Jag lade till knappen i funktionen som anropas i <ItemTemplate>(dvs den som jag nämner ovanför) och funktionen returnerar en massa htmlkod inkl asp:Button men när jag kollar på sidan så syns ingen knapp x(

Ber om ursäkt om detta anses vara förvirrande men just nu känner jag mig väldigt förvirrad :q

PDahlenMedlem sedan apr. 2004778 inlägg
#2

Nja, inte riktigt. Det är inte inom OOP man skall ha lager, utan man bygger en flerlagerlösning, en så kallad n-tier. Rent teoretiskt kan du ha en n-tier lösning utan att använda OOP.

Angående din fråga.
Ja, du kan använda en repeater för att skapa menyn. Själva menyn kan du även placera i en User Control så att du kan återanvända den till alla sidor.
If-satser behöver du inte ha några. Felet du gör är att du tänker på hur du gjorde i ASP. Det ska du inte göra eftersom ASP.NET är något helt nytt och så gott som allt görs annorlunda än i ASP.

Vad menar du med att knappen returnerar en massa htmlkod?
Med ASP.NET har man en fördel med att man enkelt kan separera design (HTML) och kod. Lägg all HTML i .aspx och koden i code-behind. När det gäller User Controls så har de också en code-behind.

För länkar och tips läs mer på http://pdc.se/blog/DisplayEntry.aspx?eid=58

CrimMedlem sedan juni 200233 inlägg
#3

ok, tack för svaret! Skall fördjupa mig i UserControls så får jag återkomma med fler frågor under dagen :e

CrimMedlem sedan juni 200233 inlägg
#4

Nu har jag läst upp mig på UserControls men förstår fortfarande inte hur jag skall göra :( Jag har letat tutorials men hittar ingen som tar upp ett problem som ens liknar mitt. Ang. OOP och N-tier programmering så var jag lite väl snabb i mitt uttalande :r

Koden som används på aspsidan ser ut så här:

<%
Function getFilm
	Dim m_objConn
	Dim m_strSQL
	Dim m_objRS
	Dim MinDatabas
	Dim m_arrRecords
		Set m_objConn = Server.CreateObject("ADODB.Connection")
		MinDatabas = "Driver={MySQL ODBC 3.51 Driver}; Server=localhost; Database=********; UID=*******; PWD=********; Option=3"
		m_objConn.Open MinDatabas
		m_strSQL = "SELECT * FROM anvar_tst order by rubrik asc"

		Set m_objRS = m_objConn.Execute(m_strSQL)
		If Not m_objRS.EOF Then
		m_arrRecords = m_objRS.GetRows
		getFilm = m_arrRecords
		End If

m_objRS.Close
Set m_objRS = Nothing
m_objConn.Close
Set m_objConn = Nothing
End Function

Dim I

arrFilm = getFilm
Dim tempvecka
tempvecka = 0
%>
<html>

			<%
			dim id, rubrik, innehall

			If IsArray(arrFilm) Then

			For I = 0 To Ubound(arrFilm,2)

			if arrFilm(1,I) <> tempvecka then
			tempvecka = arrFilm(1,I)
			Response.write "<BR><b>" & arrFilm(1,I) & "</b><br>"
			end if

			Response.write arrFilm(2,I) & "<BR>"

			If I = Ubound(arrFilm,2) Then Exit For
			Next
			Else
			Response.Write "Tekniskt fel!"
			End If
			%>
</html>

Som jag förstått det nu så skall jag ha kvar mina två första lager, lägga repeatern i en UserControll och lägga mina If-satser i CodeBehind:en som tillhör UserControllen. Sedan infogar jag bara UserControllen i min aspx-sidan och ser glad ut :e

Är jag på rätt spår? För jag förstod inte riktigt vad du menade när du sa att jag inte behöver if-satser...

PDahlenMedlem sedan apr. 2004778 inlägg
#5

Jag hade fel i att du behöver IF-satser ser jag nu när jag ser din kod.
Däremot så måste du glömma den kod du har. Om du ska göra detta i ASP.NET så måste du börja från början. Om du tittar på din ASP-kod så kommer du att glida in på fel spår.

Kolla istället vad det är du ska göra.
1. Hämta databasrader
2. Databind till en Repeater
3. På Repeaterns OnItemBound ska du köra en funktion som kollar vissa värden i raden och baserat på det ändra utseendet. Här kommer IF-satser att användas, eller ännu hellre ett Select Case.
4. Designa din Repeater så den ser ut som du vill ha den.

För att utföra detta behöver du för dessa punkter:
1. Koppla upp mot en databas och hämta db-raderna. http://samples.gotdotnet.com/quickstart/aspplus/doc/webdataaccess.aspx
2-3. Databinda till din Repeater http://www.codeproject.com/aspnet/Mastering_DataBinding.asp
4. Designa Repeaterns olika delar http://samples.gotdotnet.com/quickstart/aspplus/samples/webforms/ctrlref/webctrl/repeater/doc_repeater.aspx

Sen om du lägger detta i en vanlig sida eller i en Control ändrar inget av det ovan.

133 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)