webForumDet fria alternativet

Upplägg av kodning (nybörjartips/vägledning)

.NET

16 svar · 3 558 visningar · startad av Mika3l

Medlem sedan nov. 20018 492 inlägg
Frågan#1

Hejsan!
Håller på med en hemsida till ett webbmagasin och funderar på om jag för en gångs skull skulle ta tag i saken och försöka mig på ASP.NET igen. Gjorde ett seriöst försök när det kom för ett antal år sedan men av nån anledning gav jag mig, tyckte väl ASP va tillräckligt bra eller nåt..
I vilket fall. Har börjat läsa på W3Schools lite grann och själva kodandet känner jag att jag hänger med i. Men kruxet är hur jag ska kunna impementera det hela då min skalle är helt inne i gamla ASP-tänket.
Jag har från början tänkt mig att göra så här:
- Sidan har totalt 5 sidor/kategorier, varav två ska kopplas till databas.
- Jag använder ett dokument för alla sidor och får fram innehållet m.h.a QueryStrings.

När jag läser om ASP.NET så känns det som att upplägget är annorlunda. Funktioner läggs i Subs som anropas vid behov men hur ska jag koppla ihop detta (länkar) och hur gör jag t.ex de rena textsidorna så enkla som möjligt. Som det är nu så "avbryter" jag ju ASP-koden och kör på med min HTML.

Jag bifogar sidan under som den ser ut just nu (minus själva innehållet).
Hur implementerar jag ASP.NET på bäst sätt, vilka styrkor bör jag dra nytta av? Tips och trix mottages tacksamt (om någon förstår vad jag menar). :)

<%
Dim fbooklink, mailto
fbooklink = "<a href=""http://www.facebook.com/pages/Sunday-Morning-Magazine/163709807002555"" target=""_blank"">Facebook</a>"
mailto = "<a href=""mailto:%69%6e%66%6f%40%73%75%6e%64%61%79%6d%6f%72%6e%69%6e%67%6d%61%67%61%7a%69%6e%65%2e%73%65"">&#105;&#110;&#102;&#111;&#64;&#115;&#117;&#110;&#100;&#97;&#121;&#109;&#111;&#114;&#110;&#105;&#110;&#103;&#109;&#97;&#103;&#97;&#122;&#105;&#110;&#101;&#46;&#115;&#101;</a>"
%>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title> Sunday Morning Magazine | Photographic Web Magazine </title>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>

<div id="center">

<div id="menu">
<ul>
<li><a href="?about">About</a></li>
<li><a href="?issues">Issues</a></li>
<li><a href="?cont">Contributors</a></li>
<li><a href="?contact">Contact</a></li>
<li><a href="?ibd">I.B.D</a></li>
</ul>
</div>

<div id="logo">
<a href="index.asp">
<img src="images/logo.jpg" alt=" SUNDAY MORNING MAGAZINE " />
</a>
</div>

<div id="content">

<%
Dim strPage
strPage = Trim(Replace(Replace(Request.QueryString(),"'",""),"%",""))

If strPage = "" Then
%>

<h1>Welcome</h1>

<%
ElseIf strPage = "about" Then
%>

<h1>About</h1>

<%
ElseIf strPage = "issues" Then
%>

<h1>Issues</h1>

<%
ElseIf strPage = "cont" Then
%>

<h1>Contributors</h1>

<%
ElseIf strPage = "contact" Then
%>

<h1>Contact</h1>
<p>Please email questions and feedback to <%=mailto%>.</p>
<p>You can also get in touch via <%=fbooklink%>.</p>

<%
ElseIf strPage = "ibd" Then
%>

<h1>In Between Dreams</h1>

<%
Else
%>
<h1>Error 404</h1>
<p><b>The requested page could not be found!</b></p>
<p>Please check so the URL i correct. If you followed a link on this website, please
<a href="?contact">contact us</a> and let us know.</p>
<p><a href="javascript:history.go(-1)">Back</a></p>
<% End If %>
</div>

<div id="issues">
<ul>
<li><a href="#">#1 March 2011</a></li>
<li><a href="#">#1 Nov 2010</a></li>
</ul>
</div>

<div id="latest">
<h2>Latest issue</h2>
<a href="#" title=" Click here to read the latest issue ">
<img src="images/latest.jpg" alt=" LATEST ISSUE " />
</a>
</div>

<div id="facebook">
<iframe src="http://www.facebook.com/plugins/likebox.php?href=http%3A%2F%2Fwww.facebook.com%2Fpages%2FSunday-Morning-Magazine%2F163709807002555&amp;width=220&amp;colorscheme=light&amp;show_faces=true&amp;border_color=%23666666&amp;stream=false&amp;header=false&amp;height=202" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:220px; height:202px;" allowTransparency="true"></iframe>
</div>

<div id="footer">
<p>&copy; Sunday Morning Magazine, all rights reserved. |
<%=mailto%></p>
</div>

</div>

</body>
</html>
Medlem sedan juni 201161 inlägg
#2

Du har ju helt rätt i att man behöver tänka helt annorlunda i ASP.NET jämfört med gammal ASP.

Om vi riktar in oss på den modellen som kallas Web Forms, så bygger den på att det finns en (och bara en) form-tagg på sidan och att sidan alltid postar tillbaka till sig själv. Du behöver dock inte använda tricket med query-sträng, för en ASP.NET-sida kan ha flera element som postar och den håller själv reda på vilket element man klickade på.

Sedan måste du släppa tanken på att sidan innehåller ett skript som exekveras. En ASP.NET-sida är en klass och när man hämtar sidan (GET) eller postar tillbaka till sidan (POST) instansieras ett objekt ur denna klass. Objektet blir anropat på ett antal Event Handlers, till exempel Page_Load, i en viss ordning och sedan kommer ASP.NET-motorn anropa objektets Render-metod som genererar själva HTML-koden som skickas ut till webbläsaren.

Om du har en sida index.aspx som innehåller den statiska delen av sidan, så har du även en kod-fil index.aspx.cs (om vi antar C#) eller index.aspx.vb (om vi antar VB.NET) där du placerar dina Event Handlers. Din form-tagg, dina postback-element och de element du vill kunna påverka i din kod måste ha attributet "runat='server'" så att ASP.NET-motorn vet att sidobjektet skall ha ett motsvarande objekt som medlem i sig.

Till exempel, för att sätta rubriken så som du gör i ASP-koden, definierar du en h1-tagg med ett lämpligt id och attributet runat='server'.

<h1 id='txtRubrik' runat='server'/>

Nu kan du i din kod komma åt elementet txtRubrik, precis som om det vore ett lokalt objekt och sätta dess textinnehåll eller andra egenskaper.

Förutom HTML-taggar kan du i din .aspx-fil även använda element ur namnrymden asp:, till exempel asp:Button eller asp:TextBox. Sådana måste alltid ha attributet runat='server' och syns alltid i serverkoden. Dina menylänkar kan till exempel vara asp:LinkButton.

Behöver du några länkar till bra tutorials, så säg till. Jag har nog några att bidra med.

Medlem sedan nov. 20018 492 inlägg
#3

Tack! :)
Jag kör med VB, blir enklast så kände jag med tanke på att jag inte programmerar så mycket nu för tiden.

Så jag bör byta ut mina menylänkar till ASP.NET-diton och anropa klasser (subs?) som ändrar innehållet?
Hur funkar det med själva ändringen då så att säga, eftersom att en del bara är text och en del ska vara databas? Jag menar, jag skriver väl ut en variabel sen i dokumentet isf där jag vill placera datan, men hur får jag en hel "databaskod" till en variabel? Eller finns det andra sätt?
Hur implementerar men en scriptfil?

Jag tar gärna emot länkar om hur man kopplar sig till en MySQL-databas med ODBC 5.1, har googlat men inte hittat något annat än gamla artiklar om 3.1. :)
Vad bör man använda för att presentera en lista bestående av endast länkar och kort text? Ska presenteras i sidled fyra st och sen en ny rad. Behöver ingen paging i nuläget men ev i framtiden.

Medlem sedan juni 201161 inlägg
#4

Okej, vi pratar ju här om objektorienterad programkod, och inte skript.

Du kan få ett snabbt (och mycket slarvigt!) exempel på din kod ovan i ASP.NET.

Default.aspx:

<%@ Page Language="VB" CodeFile="Default.aspx.vb" Inherits="_Default" %>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title> Sunday Morning Magazine | Photographic Web Magazine </title>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
<form id="form1" runat="server">
<div id="center">

<div id="menu">
<ul>
<li><asp:LinkButton ID="btnAbout" runat="server">About</asp:LinkButton></li>
<li><asp:LinkButton ID="btnIssues" runat="server">Issues</asp:LinkButton></li>
<li><asp:LinkButton ID="btnCont" runat="server">Contributors</asp:LinkButton></li>
<li><asp:LinkButton ID="btnContact" runat="server">Contact</asp:LinkButton></li>
<li><asp:LinkButton ID="btnIBD" runat="server">I.B.D.</asp:LinkButton></li>
</ul>
</div>

<div id="logo">
<a href="index.asp">
<img src="images/logo.jpg" alt=" SUNDAY MORNING MAGAZINE " />
</a>
</div>

<div id="content">
<h1 id="txtHeading" runat="server">Welcome</h1>
<div id="divContent" runat="server" />
</div>

<div id="issues">
<ul>
<li><a href="#">#1 March 2011</a></li>
<li><a href="#">#1 Nov 2010</a></li>
</ul>
</div>

<div id="latest">
<h2>Latest issue</h2>
<a href="#" title=" Click here to read the latest issue ">
<img src="images/latest.jpg" alt=" LATEST ISSUE " />
</a>
</div>

<div id="facebook">
<iframe src="http://www.facebook.com/plugins/likebox.php?href=http%3A%2F%2Fwww.facebook.com%2Fpages%2FSunday-Morning-Magazine%2F163709807002555&amp;width=220&amp;colorscheme=light&amp;show_faces=true&amp;border_color=%23666666&amp;stream=false&amp;header=false&amp;height=202" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:220px; height:202px;" allowTransparency="true"></iframe>
</div>

<div id="divFooter" runat="server"/>

</div>

</form>
</body>
</html>

Default.aspx.vb:

Partial Class _Default
    Inherits System.Web.UI.Page

    Dim fbooklink As String = "<a href=""http://www.facebook.com/pages/Sunday-Morning-Magazine/163709807002555"" target=""_blank"">Facebook</a>"
    Dim mailto As String = "<a href=""mailto:%69%6e%66%6f%40%73%75%6e%64%61%79%6d%6f%72%6e%69%6e%67%6d%61%67%61%7a%69%6e%65%2e%73%65"">&#105;&#110;&#102;&#111;&#64;&#115;&#117;&#110;&#100;&#97;&#121;&#109;&#111;&#114;&#110;&#105;&#110;&#103;&#109;&#97;&#103;&#97;&#122;&#105;&#110;&#101;&#46;&#115;&#101;</a>"

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        divFooter.InnerHtml = String.Format("<p>&copy; Sunday Morning Magazine, all rights reserved. | {0}</p>", mailto)
    End Sub

    Protected Sub btnAbout_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnAbout.Click
        txtHeading.InnerText = "About"
        divContent.InnerHtml = ""
    End Sub

    Protected Sub btnIssues_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnIssues.Click
        txtHeading.InnerText = "Issues"
        divContent.InnerHtml = ""
    End Sub

    Protected Sub btnCont_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnCont.Click
        txtHeading.InnerText = "Contributors"
        divContent.InnerHtml = ""
    End Sub

    Protected Sub btnContact_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnContact.Click
        txtHeading.InnerText = "Contact"
        divContent.InnerHtml = String.Format("<p>Please email questions and feedback to {0}.</p><p>You can also get in touch via {1}.</p>", mailto, fbooklink)
    End Sub

    Protected Sub btnIBD_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnIBD.Click
        txtHeading.InnerText = "In Between Dreams"
        divContent.InnerHtml = ""
    End Sub
End Class

Som du ser är innehållet på sidan inkapslad i en form-tagg och dina meny-länkar är asp:LinkButton. De element på sidan som jag vill modifiera har runat='server' så att jag kommer åt dem i programkoden.

Själva programkoden är ju fullvärdig .NET-kod och kan accessa databaser eller webbtjänster eller vad du nu vill.

I verkligheten skulle man ju inte göra så här för den här typen av layout, utan använda något som kallas Master Pages istället. Men detta ger dig kanske en liten inblick i hur sidor i ASP.NET (Web Forms) hänger ihop?

Medlem sedan nov. 20018 492 inlägg
#5

Oj, tack så mycket! Mer till svar än vad jag kunde förvänta mig! ;) :)
Ska ta en titt och testa lite imorn när jag har tid och återkommer säkert med frågor.
Ska ta en titt på Master Pages också, och tar gärna emot en kortare förklaring och/eller nyttiga länkar. :)

Medlem sedan maj 20012 812 inlägg
#6

Om du nu ändå skall lära dig ASP.NET (vilket är helt rätt om alternativet var klassisk ASP). Så passa på att använd dig av MVC Pattern tillsammans med ASP.NET. Det är lite annorlunda jämfört med "vanlig" ASP.NET men enligt min mening ett betydlig bättre sätt att strukturera upp sin kod även om man inte tänker använda sig av TDD (Test Driven Domain) för att skapa lösningen.

Är man dessutom riktigt våglig så testar man att använda @Razor som view engine istället för ASPX. Glöm inte bort att titta på Entity Framework 4.1 med Code first för att skapa enkel databashantering. Sen har du DDD och CQRS att titta på när du kommit längre.... :)

Som du ser så finns det massor med att lära sig, så du kommer inte behöva fundera på vad du skall göra på fritiden i de närmsta 2-3 åren och undertiden har det kommit massor med nya saker som vi skall använda som utvecklare.

Börja här: http://www.asp.net/mvc och titta på så många filmer och läs bloggar och artiklar på nätet. Jag har inte köpt en utvecklingsbok på de senaste 12 åren. ALL information finns på nätet om man bara använder google rätt, dessutom helt gratis.

- M

Medlem sedan apr. 2009433 inlägg
#7

Fan!
Jag måste verkligen börja lära mig .NET..

men det är lite som Mika3l säger. Det är jävligt bekvämt med asp om man inte programmerar så mycket och man kan ju faktiskt lösa rätt mycket med traditionell asp :)

Medlem sedan juli 2003555 inlägg
#8

Tja, om man är beredd att vända ut och in på sig själv för att hålla kvar vid ASP så fungerar ASP, ett tag till i alla fall. ASP är t.ex. ingenting som lagas längre, och senaste versionen kom för länge, länge sedan.

Jag rekommenderar absolut inte att man gör någon nyutveckling i ASP, bara underhåll av gammalt skrot.

Medlem sedan nov. 20018 492 inlägg
#9

Nu har jag jobbat vidare ett tag och ändrat om så jag använder mig av masterpages. Har även testat mig på lite databashantering nu också och här behöver jag lite hjälp.
Jag vill göra en lista med nr (av magasinet), listan ska vara horisontell med tre nr och sedan ny rad. Hur löser jag detta? Har googlat men inte funnit något till hjälp.
Koden jag har nu fungerar perfekt förutom just att jag inte får till radbrytningen.
Tar gärna emot kritik också om det är något som jag kan koda på ett smidigare sätt.

<%@ Page MasterPageFile="master.master" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.Odbc" %>
<%@ Import Namespace="Microsoft.Data.Odbc" %>

<script runat="server">
Sub Page_Load(Source as object, e as EventArgs)
If Not Page.IsPostBack Then

Dim Connection As OdbcConnection = New OdbcConnection("DRIVER={MySQL ODBC 5.1 Driver}; SERVER=localhost; DATABASE=****; UID=-*****; PASSWORD=*****; OPTION=3")
Dim SQL As String = "SELECT * FROM tblIssues"

Dim ODBCdataadapter As OdbcDataAdapter = New OdbcDataAdapter(SQL, Connection)

Dim ODBCdataset As DataSet = New DataSet()

ODBCdataadapter.Fill(ODBCdataset)

data.DataSource = ODBCdataset

data.DataBind()

End If
End Sub
</script>

<asp:Content ContentPlaceHolderId="content" runat="server">
<h1>Issues</h1>

<form runat="server">
<asp:Repeater id="data" runat="server">

<HeaderTemplate>
<table class="issues_table">
</HeaderTemplate>

<ItemTemplate>
  <td class="issues_td">
<h3>#<%#Container.DataItem("f_nr")%>&nbsp;<%#DataBinder.Eval(Container.DataItem,"f_date","{0:MMM yyyy}")%></h3>
<a href="#" title=" Click to read issue ">
<img src="images/covers/<%#Container.DataItem("f_pic")%>.jpg" class="issue_img" />
</a>
  </td>
</ItemTemplate>

<FooterTemplate>
 </tr>
</table>
</FooterTemplate>

</asp:Repeater>
</form>

</asp:Content>
Medlem sedan nov. 20018 492 inlägg
#10

Just det, en fråga till!
I min masterpage så deklarerar jag ett par variabler som är länkar som jag enkelt vill kunna lägga in i textstycken. Men sidorna som använder sig av masterpagen kan inte använda variabeln för att den inte är publik. Har googlat och det känns som att det inte vore något problem men jag kan bannemig inte hitta hur man gör en variabel publik.

<%
Dim fbooklink as string = "<a href=""http://www.facebook.com/pages/Sunday-Morning-Magazine/163709807002555"" target=""_blank"">Facebook</a>"
Dim mailto as string = "<a href=""mailto:%69%6e%66%6f%40%73%75%6e%64%61%79%6d%6f%72%6e%69%6e%67%6d%61%67%61%7a%69%6e%65%2e%73%65"">&#105;&#110;&#102;&#111;&#64;&#115;&#117;&#110;&#100;&#97;&#121;&#109;&#111;&#114;&#110;&#105;&#110;&#103;&#109;&#97;&#103;&#97;&#122;&#105;&#110;&#101;&#46;&#115;&#101;</a>"
%>
Medlem sedan nov. 20018 492 inlägg
#11

DataList löste mitt första problem (länk). Hur kan jag lägga till en CSS-klass på table- och td-taggen som datalist renderar?

Medlem sedan nov. 20018 492 inlägg
#12

Lyckades visst lösa det här själv också, men tar gärna emot tips om det finns enklare lösningar.

<asp:DataList id="issueslist" class="issues_table" runat="server" RepeatColumns="3" RepeatDirection="Horizontal">
.issues_table {
	width: 546px;
	border: 0;
}
.issues_table td {
	width: 182px;
	height: 226px;
	padding-right: 22px;
}
Medlem sedan feb. 20013 023 inlägg
Medlem sedan maj 20012 812 inlägg
#14

Mika3l skrev:

Tar gärna emot kritik också om det är något som jag kan koda på ett smidigare sätt.

Framför allt så skall du inte blanda logik och presentationskontroller i dina .aspx filer. Dessa skall inte innehålla någon som helst .net kode. Det är det som du har dina codebehind filer till. Det du gör nu är att du fortsätter med klassisk ASP utveckling men i ASP.NET. Därmed tappar du också fördelarna med ASP.NET.

Dessutom skall du sky dataset som pesten i weblösningar. Dataset har sin funktion och det är att skapa en "in memory-databas" men eftersom weblösningar är stateless, så har du ingen anledning att skapa din en "in memory-databas" och skall därför inte använda dig av dataset. Absolut bäst är att använda sig av DTO (Data Transfer objects) som du kan gör med "EF 4.1 Code First". Alternativ 2 är att du använder dig av LINQ to SQL för att skapa dina SQL frågor. Och det sista alternativet är att du använder dig av en datareader (absolut bäst ur prestanda hänsyn). Men glöm att du ens har hört talas om dataset.

DataBinder.Eval() är en styggelse sett ur prestanda synpunkt, och du bör istället lyssna till ItemDataBound eventet på din repeater och göra dina förändrignar i den koden, dessutom så separerar du din logik ytterligare från ditt UI. (http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater.itemdatabound.aspx)

Men om du använder dig av DTO istället så slipper du även att använda detta event eftersom du i dina DTO kan göra alla de förändringar du vill så de efterliknar det som du vill presentera på sidan.

- M

Medlem sedan feb. 20013 023 inlägg
#15

Gladh, du har förstås på ditt sätt helt rätt. Frågan är dock om den unge mannen vill snickra ihop en liten hemsida och ha lite kul eller om han brinner för programmering och ska jobba resten av livet med att bygga skalbara enterprise-applikationer. Det kan vara väldigt mycket information att ta in om man ska göra "rätt", det kan vara enklare att börja bygga lite fullösningar som ger snabba resultat. Sedan kan man avgöra om man vill gå vidare till den högre skolan.

Medlem sedan maj 20012 812 inlägg
#16

clarkbones skrev:

Gladh, du har förstås på ditt sätt helt rätt.

Klart jag har :e

clarkbones skrev:

Frågan är dock om den unge mannen vill snickra ihop en liten hemsida och ha lite kul eller om han brinner för programmering och ska jobba resten av livet med att bygga skalbara enterprise-applikationer. Det kan vara väldigt mycket information att ta in om man ska göra "rätt", det kan vara enklare att börja bygga lite fullösningar som ger snabba resultat. Sedan kan man avgöra om man vill gå vidare till den högre skolan.

Helt klart skall man lägga nivån efter lösningen och dess levnadslivslängd och dessutom om det bara är en POC eller ett riktigt projekt. Men i vilket fall som helst så efterfrågades en smidigare lösning, och jag tycker helt klart att de förslag som jag lämnade gör lösningen smidigare i både små och stora projekt. Så om det är något som skall ut i produktionsmiljö så tycker jag förändringarna bör genomföras.

Och om det bara är ett roligt projekt för att lära sig mer om ASP.NET och vad man kan göra så kör på och lär dig mer efter hand även om jag tycker man inte skall börja i ASP.NET delen utan istället börja i andra ändan (http://www.webforum.nu/showpost.php?p=943522&postcount=6)

- M

Medlem sedan nov. 20018 492 inlägg
#17

Tjohej!
Nu är jag igång igen och testar, har kommit en bit men det känns som att jag gör allt väldigt osmidigt så jag vill ha hjälp att komma på rätt väg.

master.master

<%@ Master %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.Odbc" %>
<%@ Import Namespace="Microsoft.Data.Odbc" %>

<%
Dim fbooklink as string = "<a href=""http://www.facebook.com/pages/Sunday-Morning-Magazine/163709807002555"" target=""_blank"">Facebook</a>"
Dim mailto as string = "<a href=""mailto:%69%6e%66%6f%40%73%75%6e%64%61%79%6d%6f%72%6e%69%6e%67%6d%61%67%61%7a%69%6e%65%2e%73%65"">&#105;&#110;&#102;&#111;&#64;&#115;&#117;&#110;&#100;&#97;&#121;&#109;&#111;&#114;&#110;&#105;&#110;&#103;&#109;&#97;&#103;&#97;&#122;&#105;&#110;&#101;&#46;&#115;&#101;</a>"
%>

<script runat="server">
Dim Connection As OdbcConnection = New OdbcConnection("DRIVER={MySQL ODBC 5.1 Driver}; SERVER=localhost; DATABASE=smm; UID=root; PASSWORD=test; OPTION=3")

Sub Page_Load(Source as object, E as EventArgs)
If Not Page.IsPostBack Then

Dim SQL As String = "SELECT f_iid FROM tblIssues ORDER BY f_date DESC LIMIT 1,1"

Dim Odbcdataadapter As OdbcDataAdapter = New OdbcDataAdapter(SQL, Connection)

Dim ODBCdataset As DataSet = New DataSet()

ODBCdataadapter.Fill(ODBCdataset)

latest.DataSource = ODBCdataset
latest.DataBind()

Dim SQLL As String = "SELECT f_iid, f_nr, f_date FROM tblIssues ORDER BY f_date DESC LIMIT 0,5"

Dim Odbcdataadapter2 As OdbcDataAdapter = New OdbcDataAdapter(SQLL, Connection)

Dim ODBCdataset2 As DataSet = New DataSet()

ODBCdataadapter2.Fill(ODBCdataset2)

latestlist.DataSource = ODBCdataset2
latestlist.DataBind()

End If
End Sub
</script>

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title> Sunday Morning Magazine | Photographic Web Magazine </title>
<meta name="keywords" content="magazin, online magazine, web magazine, magasin, photo, photography, foto, fotografi, fototidning, sunne, broby grafiska,in between dreams, sunday morning magazine, sunday, morning, in between dreams" />
<meta name="description" content="Sunday Morning Magazine - Photographic web magazine" />
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<meta http-equiv="imagetoolbar" content="no" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="expires" content="0" />
	<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
	<script>
		!window.jQuery && document.write('<script src="jquery-1.4.3.min.js"><\/script>');
	</script>
	<script type="text/javascript" src="./fancybox/jquery.mousewheel-3.0.4.pack.js"></script>

	<script type="text/javascript" src="./fancybox/jquery.fancybox-1.3.4.pack.js"></script>
	<link rel="stylesheet" type="text/css" href="./fancybox/jquery.fancybox-1.3.4.css" media="screen" />
<link rel="stylesheet" type="text/css" href="style.css" />
<script type="text/javascript">
		$(document).ready(function() {
			$("#readissue").fancybox({
				'width'				: '90%',
				'height'			: '90%',
				'autoScale'			: false,
				'transitionIn'		: 'none',
				'transitionOut'		: 'none',
				'type'				: 'iframe',
				'overlayOpacity'		: '0.9',
				'overlayColor'			: '#444444',
				'scrolling'			: 'no',
				'titleShow'			: false
			});
		});
</script>
</head>
<body>

<div id="center">

<div id="menu">
<ul>
<li><a href="about.aspx">About</a></li>
<li><a href="issues.aspx">Issues</a></li>
<li><a href="contributors.aspx">Contributors</a></li>
<li><a href="contact.aspx">Contact</a></li>
<li><a href="inbetweendreams.aspx">I.B.D</a></li>
</ul>
</div>

<div id="logo">
<a href="index.aspx">
<img src="images/logo.jpg" alt=" SUNDAY MORNING MAGAZINE " />
</a>
</div>

<div id="content">

<asp:ContentPlaceHolder id="content" runat="server">
</asp:ContentPlaceHolder>

</div>

<div id="issues">
<ul>
<asp:Repeater id="latestlist" runat="server">
<ItemTemplate>
<li><a id="readissue" href="read.aspx?id=<%#Container.DataItem("f_iid")%>">#<%#Container.DataItem("f_nr")%>&nbsp;<%#DataBinder.Eval(Container.DataItem,"f_date","{0:MMM yyyy}")%></a></li>
</ItemTemplate>
</asp:Repeater>
</ul>
</div>

<div id="latest">
<h2>Latest issue</h2>
<asp:Repeater id="latest" runat="server">
<ItemTemplate>
<a id="readissue" href="read.aspx?id=<%#Container.DataItem("f_iid")%>" title=" Click here to read the latest issue ">
<img src="images/latest.jpg" alt=" LATEST ISSUE " />
</a>
</ItemTemplate>
</asp:Repeater>
</div>

<div id="facebook">
<iframe src="http://www.facebook.com/plugins/likebox.php?href=http%3A%2F%2Fwww.facebook.com%2Fpages%2FSunday-Morning-Magazine%2F163709807002555&amp;width=220&amp;colorscheme=light&amp;show_faces=true&amp;border_color=%23666666&amp;stream=false&amp;header=false&amp;height=202" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:220px; height:202px;" allowTransparency="true"></iframe>
</div>

<div id="footer">
<p>&copy; Sunday Morning Magazine, all rights reserved. |
<%=mailto%></p>
</div>

</div>

</body>
</html>

issues.aspx

<%@ Page MasterPageFile="master.master" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.Odbc" %>
<%@ Import Namespace="Microsoft.Data.Odbc" %>

<script runat="server">
Sub Page_Load(Source as object, e as EventArgs)
If Not Page.IsPostBack Then

Dim Connectionn As OdbcConnection = New OdbcConnection("DRIVER={MySQL ODBC 5.1 Driver}; SERVER=localhost; DATABASE=smm; UID=root; PASSWORD=test; OPTION=3")
Dim SQL As String = "SELECT f_iid, f_nr, f_pic, f_date FROM tblIssues"

Dim ODBCdataadapter As OdbcDataAdapter = New OdbcDataAdapter(SQL, Connectionn)

Dim ODBCdataset As DataSet = New DataSet()

ODBCdataadapter.Fill(ODBCdataset)

issueslist.DataSource = ODBCdataset

issueslist.DataBind()

End If
End Sub
</script>

<asp:Content ContentPlaceHolderId="content" runat="server">
<h1>Issues</h1>

<form runat="server">
<asp:DataList id="issueslist" class="issues_table" runat="server" RepeatColumns="3" RepeatDirection="Horizontal">

<ItemTemplate>
<h3>#<%#Container.DataItem("f_nr")%>&nbsp;<%#DataBinder.Eval(Container.DataItem,"f_date","{0:MMM yyyy}")%></h3>
<a href="#" title=" Click to read issue ">
<img src="images/covers/<%#Container.DataItem("f_pic")%>.jpg" class="issue_img" />
</a>
<a id="readissue" href="read.aspx?id=<%#Container.DataItem("f_iid")%>">Read</a> |
<a href="issuesinfo.aspx?id=<%#Container.DataItem("f_iid")%>">More info</a>
</ItemTemplate>

</asp:DataList>
</form>

</asp:Content>

Tycker den extra databaskopplingen känns onödig i issues.aspx samt de två repeaters som används i master, borde gå att lösa smidigare?
Tänkte även lägga koderna i separata filer men tyckte (av gammal vana förmodligen) att det var enklast att börja så här.

Har kikat lite på razor också hos W3 och det verkade ju betydligt enklare vid en första anblick iaf. Kanske skulle hoppa på det tåget så snabbt som möjligt eller? :)

298 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
149 ms — deklarationer (db)
0 ms — hämta statistik (cache)
145 ms — hämta tråd, inlägg och bilagor (db)
147 ms — ändringar (db)