Avatar billede shaagerup Nybegynder
21. august 2007 - 20:57 Der er 10 kommentarer og
1 løsning

Clean ASP.NET, uden Microsofts controls?

Jeg laver af og til nogle små webbaserede værktøjer til brug på en Microsoft-server. Indtil nu har jeg lavet det med ASP VBscript, hvor jeg har delt alle sider op i 2 filer.

F.eks:
- example.asp (præsentation)
- example.code.asp (programkode)

Et eksempel kunne være:

example.asp:
------------
<!--#include file="example.code.asp"-->
<html>
<head>
<title><%= site.heading %></title>
</head>
<body>
<h1><%= site.heading %></h1>
<ul>
<% Dim i: For i=0 To UBound(site.items) %>
<li><%= site.items(i) %></li>
<% Next %>
</ul>
</body>
</html>


example.code.asp
----------------
<!--#include file="lib/inc.asp"-->
<%
Dim site : Set site = new Example
Class Example

    Public heading
    Public items

    Private Sub Class_Initialize
        heading = "Test"
        items = Array("test1", "test2")

    End Sub

End Class

%>

Dette fungerer egentlig fint.. Men: Jeg er grundigt træt af de begrænsninger som VBScript giver mig - jeg vil meget hellere over til C#.

Er der en måde, hvor jeg i ASP.NET kan udføre noget lignende det ovenstående: Dvs. have mulighed for simple for-loops,whiles etc. i mit view, uden at skulle bruge en af Microsoft's indbyggede ting, der modarbejder mere end det gavner? (jeg brugte en halv dag på at tæske rundt med det).

Jeg bruger (og vil blive ved med at bruge) en simpel editor (ingen Visual Studio!), og jeg vil gerne have at koden skal være så simpel som mulig. I Classic ASP er der mulighed for at bygge noget fra bunden -- i ASP.NET føler jeg mig mere låst fast i nogle unødvendige rammer, og at jeg skal slæbe rundt på et kæmpe apparat, selvom jeg blot er ved at lave en lille simpel side.

Jeg håber at det er mig der tager fejl vedr. ASP.NET, og at jeg bare har grebet det forkert an.

Derfor: Er der nogen der kan point'e i den rigtige retning, og evt. skrive ovenstående lille eksempel i ASP.NET C#, uden brug af Microsoft's user controls?
Avatar billede nielle Nybegynder
21. august 2007 - 22:24 #1
Det kan ikke helt gøres som i ASP Classic, men det kan da ligne temmeligt meget:

1) Placer denne fil:

===== Example.cs =====

public class Example
{
    public string heading;
    public string[] items;

    public Example()
    {
        heading = "Test";
        items = new string[] { "test1", "test2" };
    }
}

===== Example.cs =====

i folderen App_Code. Filer placeret der kræver ikke at blive includet - de er altid tilgængelige.

2) Tilføj denne fil til projektet:

===== Default.aspx =====

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%
    Example site = new Example();
%>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>
        <%= site.heading %>
    </title>
</head>
<body>
    <h1>
        <%= site.heading %>
    </h1>
    <ul>
        <%
            for (int i = 0; i < site.items.Length; i++)
                Response.Write("<li>" + site.items[i] + "</li>");
        %>
    </ul>
</body>
</html>

===== Default.aspx =====

Der er nok et par oplysninger som kan skæres væk, f.eks. AutoEventWireup og CodeFile.
Avatar billede neoman Novice
21. august 2007 - 22:25 #2
Lidt OT, idet det ikke besvarer dit specifikke spørgsmål :

Min far koder FORTRAN 66 den dag i dag. I det sprog findes end ikke en IF.. THEN..ELSE..ELSEIF..ENDIF. Det at det tager ham dobbelt så lang tid at kode noget uden struktureret programmering eller en interaktiv debugger, rager ham en papand, fordi "jeg er sku lige så hurtig på denne måde", men det er altså kun hans egen mening.

Ovenstående blot som en reminder om, at der er en grund til at der er det dersens "kæmpe apparat". Hvis du koder som hobby, så er det da også fint nok. Men, hvis du sælger din produktivitet, så IMHO skylder du dig selv lige at glemme alt om ASP og kigge på .NET som et værktøj, der kan gøre en hel del for din produktivitet (et step fra ASP til  ASP.NET er næsten lige så stort som fra Assembler til ting som Pascal eller C). I dette tilfælde, at se bort fra ting som  VS eller de diverse Express-udgaver, er blot at skyde sig selv i foden - derinde "koden skal være så simpel som mulig" betyder, at du med en eller to linjer kan lave noget som  ville kræve mange linjer i classic ASP. Men - det kræver at man sætter sig ind i det.
Avatar billede nielle Nybegynder
21. august 2007 - 22:27 #3
<%@ Page Language="C#" %>

<%
    Example site = new Example();
%>
<html>
<head>
    <title>
        <%= site.heading %>
    </title>
</head>
<body>
    <h1>
        <%= site.heading %>
    </h1>
    <ul>
        <%
            for (int i = 0; i < site.items.Length; i++)
                Response.Write("<li>" + site.items[i] + "</li>");
        %>
    </ul>
</body>
</html>
Avatar billede neoman Novice
21. august 2007 - 22:54 #4
Og i øvrigt ...i ASP.NET om man bruger VB eller C# er stort set ligegyldigt: de bliver alligevel compilet til det samme, og der er ret små forskelle mellem hvad de respektive sprog kan.
Avatar billede shaagerup Nybegynder
21. august 2007 - 23:19 #5
neoman:
Jeg er godt klar over, at Microsoft's færdiglavede elementer gør kodningen hurtigere -- i første omgang. Dog irriterer det mig, at jeg ikke har 100% kontrol over det resultat der kommer ud i sidste ende - dvs min HTML, CSS og JavaScript. Man skal ikke bare finde fejl i ens egen kode, men også tæske med uhensigtsmæssigheder i Microsoft's framework. Til sidst ender man op med en omgang ulæselig snask, fyldt med work-arounds til frameworket.

nielle:
Lækkert, jeg var ikke klar over at man stort set kunne føre præcis samme praksis med over i ASP.NET.

--

Det eneste jeg har det lidt skidt med er, at det ikke er "best practice" at kode på den måde - eller hvad? Er der en måde at kode helt stringent efter ASP.NET-standard, men uden Visual Studio, og uden Microsofts form-komponenter etc?

Fordelen ved ASP.NET ser ud til at være at *al* programkode bliver indkapslet. Dvs. også loop-constructs etc. Er der en simpel måde at lave sine egne "components" til sit view, der eksempelvis viser en "unordered list" som ovenfor?
Avatar billede nielle Nybegynder
22. august 2007 - 08:50 #6
I ASP.Net kan man lave inline-kode, som vist ovenfor, eller codebehind-kode hvor C# koden placeres i en separat fil. Med inline kode kan du lave mange ting som ligner ASP Classic - og du behøver i øvrigt ikke at gå så drastisk til værk som ovenfor: du kan sagtens lave inline kode direkte i den standard skabelonen som VS stiller op med.

Det er korrekt at du ikke har 100 % kontrol med HTML'en med MS' komponenter. Man kan dog komme ret langt med at tilpasse dem (men det kræver selvfølgeligt intens studie ag dokumentationen). Fordelen ved dem er imidlertid at ASP.Net selv skulle kunne finde ud af at tilpasse den genererede HTML efter hvilken browser den vises i - der er f.eks. stor forskel på om den skal vises i en MSIE7, en Safari eller i en Opera på en telefon. Dette mister du hvis du selv "hardcoder" din HTML.

Du kan ivrigt vælge en slags middelløsning. Brug ASP.Net komponenterne der hvor du er tilfreds med resultatet, og brug så inline-kode de steder hvor du ønsker 100% kontrol.

Siden du nu spørger til best practice, så er det uden tvivl at bruge komponenterne som de er og i øvrigt at placere det meste af logikken i codebehind-filer. Især det sidste er en rigtig dejlig ting i forhold til Classic hvor at du meget hurtigt får blandet logik og layout sammen i en stor pærevælling (hvis ikke du var meget omhyggelig med at holde det adskilt).

Afslutningsvist forstår jeg ikke helt at du snakker om Visual Studio i denne sammenhæng. Det er ikke VS som introducerer kontrollernes look-n-feel; de er defineret i selve frameworket og VS giver bare adgang til dem (men vælger selvfølgeligt nogle standard konfigurationer for dem). Problemstillingen ville ikke være meget anderledes hvis du vælger at skrive din kode i f.eks. SharpDevelop eller i Notepad (og efterfølgende kompilere med csc.exe).
Avatar billede shaagerup Nybegynder
23. august 2007 - 22:58 #7
Jeg takker for svarene, nielle - smider du et svar?

Grunden til at jeg nævnte Visual Studio er, at jeg har på fornemmelsen, at dele af ASP.NET-frameworket er lavet på en sådan måde, at det vil være uoverkommeligt at bruge *uden* IDE'en, da den normalt opretter dusinvis af XML-konfigurationsfiler etc.

Som du kan høre, kender jeg ikke så meget til det -- jeg lukker derfor spørgsmålet, og så vil jeg i fred og ro undersøge ASP.NET nærmere, når jeg får tid :-)
Avatar billede nielle Nybegynder
23. august 2007 - 23:01 #8
Svar :^)
Avatar billede arne_v Ekspert
26. august 2007 - 05:40 #9
En repeater giver en ganske pæn kontrol over det genererede.
Avatar billede arne_v Ekspert
26. august 2007 - 05:42 #10
Og hvad er der galt med det klassiske sprog Fortran 66 ??

Har du ikke lært at en dannet person kan mindst et af: latin, oldgræsk, Fortran og Cobol ?
Avatar billede neoman Novice
26. august 2007 - 11:53 #11
Hehe - intet galt, det er blot spørgsmålet om graden af masochisme:-)
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

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