Avatar billede mach3 Nybegynder
18. oktober 2004 - 12:00 Der er 12 kommentarer og
1 løsning

GUI helt fra bunden!

Hej,

Jeg skal til at lave en GUI helt fra bunden i ASP.NET. Jeg anvender Visual Studio .NET 2003 som IDE. GUI'en kommer til at besetå af et login og nogle sider hvor det er muligt at ændre personlige data og den slags.

Har I nogle gode råd og tips til hvordan jeg får lavet det på en optimal måde?

Skal jeg anvende business objects eller code behinds? Håber I kan bidrage med nogle erfaringer i selv har gjort jer... Og faldgrupper, hvad skal man passe på?

På forhånd tak for hjælpen
Med venlig hilsen
Avatar billede mach3 Nybegynder
18. oktober 2004 - 12:28 #1
Kan I anbefale mig at anvende Windows Forms?
Avatar billede nielsbrinch Nybegynder
18. oktober 2004 - 12:51 #2
Windows Forms er til Windows-applikationer. Ikke web-applikationer (som asp.net er)
Avatar billede snepnet Nybegynder
18. oktober 2004 - 21:14 #3
Hej mach3 :o)

Sådan lidt firkantet har du grundlæggende 2 ".net måder" at gøre det på.
(der er så absolut nyancer inden for begge dele).

1)
Du kan skrive din GUI med aspx-kode (deklarativt), f.eks. sådan her :

<asp:Button id="SomeButton" OnClick="SomeHandler" Text="Tryk her" runat="server"></asp:Button>

Ovenstående skal du så have angivet i en serverside form, så det hele bliver som følger :

<form id="Form1" runat="server">
  <asp:Button id="SomeButton" OnClick="SomeButton_Click" Text="Tryk her" runat="server"></asp:Button>
</form>

2)
Du kan opbygge din sider dynamisk ved brug af objektmodel (eller det abstraktionslag om du vil) der er lavet ovenpå de vanlige html-elementer, og den kode du så før ville så kunne opskrives som følger :

Button btn = new Button();
btn.ID = "SomeButton";
btn.Click += new EventHandler(SomeButton_Click);

For begge skal du have en serverside handler af klik-eventet :
protected void SomeButton_Click(object sender, EventArgs e)
{
  // her kan du så håndtere klikket serverside
}

Begge ovenståen eksempler resulterer i nedenstående html :
<input type="submit" name="SomeButton" value="Button" id="SomeButton" />

Vær opmærksom på at der desuden eksisterer der de samme muligheder som der altid har gjort.

... så langt så godt :o) ...

Med hensyn til det med code-behind, så kan man vel ikke sige at der er en regel for det.... Visual Studio gør det som standard, men andre værktøjer (webmatrix) gør ikke.

Selv bruger jeg meget sjældent andet end code-behind, og jeg er egentlig meget glad for at have min aspx-kode og min c# kode i to forskellige filer, og hvis du alligevel bruger visual studion 2003, synes jeg bare du skal følge miljøets standard for den slags.

Nu spørger du om du skal bruge business objects eller code-behinds, og jeg tror ikke helt jeg forstår hvad du mener der, da det ene på ingen måde udelukker det andet... Du må lige uddybe hvis du vil have nogle bud på det.

Jeg vil gerne bidrage med bud på arkitektur og den slags, hvis det er sådan noget du gerne vil have lidt info om, men nu skriver du jo GUI i overskriften, så indtil videre holder jeg mig lidt til det :o)

Faldgruber kan man så afgjort godt sige der er.... Nå du arbejder i designeren i visual studio, så er der gjort meget for at det virker som om du sidder og udvikler en windows-applikation.
Du kan trække diverse funktionelle kontroller ind på din form, placere dem som du har lyst, og på helt samme måde som i et udviklingsmiljø til windows-applikationer tilknyttet eventhandlers til gængse events.

Når man så begynder at få lidt udvidede "GUI-behov", vil man måske gerne have, der dukker nogle flere kontroller op på siden, hvis man klikker på det ene eller det andet.
Og det er så på det tidspunkt, at illusionen godt kan lide et alvorligt knæk, da dynamisk indsatte kontroller ikke bliver siddende på siden som man måske kunne forvente.
Prøv eventuelt dette lille eksempel :

Hvis du vil prøve det i visual studio, kan du bare oprette en form der hedder ButtonSample, og så skifte hele din code-behind ud med nedenstående :

// selve koden :
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace EXP2
{
    public class ButtonSample : System.Web.UI.Page
    {
        protected HtmlForm Form1;

        private void Page_Load(object sender, System.EventArgs e)
        {
            Button btn = new Button();
            btn.Text = "Button1";
            btn.Click += new EventHandler(btn_Click1);
            Form1.Controls.Add(btn);
        }

        private void btn_Click1(object sender, EventArgs e)
        {
            Response.Write("Der er klikket på knap1");
            Button btn = new Button();
            btn.Text = "Button2";
            btn.Click += new EventHandler(btn_Click2);
            Form1.Controls.Add(btn);
        }

        private void btn_Click2(object sender, EventArgs e)
        {
            Response.Write("Der er klikket på knap2");
        }

        override protected void OnInit(EventArgs e)
        {
            InitializeComponent();
            base.OnInit(e);
        }
       
        private void InitializeComponent()
        {   
            this.Load += new System.EventHandler(this.Page_Load);
        }
    }
}

Eksemplet viser hvordan du tilføjer en kontrol (en knap) dynamisk, og abbonnerer på klik-eventet fra den (som vist tidligere).
I handleren af klik-eventet tilføjer du så en anden knap, og klikeventet fra den abbonerer du også på.

Havde det være en windows-applikation havde der ikke været nogen som helst problemer i det, men det er umuligt at gøre det som vist når det er en web-applikation du laver.

Eksemplet + den Page og Control life cycle som frameworket sikrer for at simulere en "knap-så-stateless" http-applikation kan godt give rigtig mange grå hår i hovedet.

.
.
.

Ved ikke om du kan bruge det til noget, men du skal være meget velkommen til at spørge løs - så skal jeg svare efter bedste evne.

mvh
(Den del af "pakken" der går under navnet ASP.NET er pakket ind i det namespace der hedder System.Web, og der er ikke nogen winforms derinde.... Du kan dog ganske snildt lave en windows-applikation der distribueres over nettet med en vis automatik for sikring af at det er den nyeste version der ligger hos klienten - typisk betegnet som en smartclient).
Avatar billede mach3 Nybegynder
18. oktober 2004 - 22:25 #4
snepnet >> kanon mand. det er godt der er folk som dig til at hjælpe og komme med gode råd. er lige kommet ind af døren, kigger på det lidt senere og skriver tilbage.

mange tak :-)
Avatar billede snepnet Nybegynder
18. oktober 2004 - 22:41 #5
det er bare helt iorden - jeg håber du kan bruge noget af det, ellers bare spørg :o)
mvh
Avatar billede mach3 Nybegynder
19. oktober 2004 - 10:12 #6
hej igen!

jeg har bestemt mig for at anvende metode 1.

når man klikker på en submit knap fx skal man komme til en anden aspx side, hvordan kan man gøre det smartest i aspx?
Avatar billede snepnet Nybegynder
19. oktober 2004 - 10:17 #7
Der kan du så vælge enten at gøre det med en "normal" html-kontrol, hvor du giver den et lille script at arbejde med, men hvis du gerne vil tilbage på serveren og køre noget koden kan så afslutte med at redirecte sådan her :

// klikhandleren fra før
protected void SomeButton_Click(object sender, EventArgs e)
{
  // et eller andet der skal ske, og så
  Response.Redirect(<url>);
}

mvh
Avatar billede snepnet Nybegynder
19. oktober 2004 - 21:25 #8
kan du få det til at makke ret mach3 - eller er det noget værre skidt ?
mvh
Avatar billede mach3 Nybegynder
19. oktober 2004 - 23:57 #9
jeg arbejder på det snepnet! det er et projekt jeg skal til at i gang med helt fra bunden, så sidder også og laver database design osv...

men jeg sætter stor pris for din hjælp, jeg vender tilbage med spørgsmål løbende :-)

men du kan når som helst bare smide et svar, så får du pointene :-)

med venlig hilsen
Avatar billede snepnet Nybegynder
20. oktober 2004 - 08:16 #10
alletiders :o)

det lyder spændende - du må endelig skrive her, hvis der er noget du har lyst til at spørge om !

du kan lige få et par "inspirationslinks" her... så kan du jo kigge på dem når det passer :o)

først... et rigtig udemærket MS entrypoint, hvis du ikke skulle kende det i forvejen :
http://www.microsoft.com/resources/practices/default.mspx
det er Microsofts patterns and practices site.... der kan du få fat i rigtig mange gode ting bl.a.

Enterprise solution patterns :
http://msdn.microsoft.com/architecture/patterns/default.aspx?pull=/library/en-us/dnpatterns/html/Esp.asp

Application buildingblocks :
http://www.microsoft.com/resources/practices/code.mspx

Og en masse andre gode ting :oP

Du kan også lige se en skæg en her .... det er sådan et "lav-det-hele-uden-at-kode-værktøj" (der er mange af slagsen.... fra mindre tools der genererer et datalag, og til sådan et som der er linket til her)
http://www.ironspeed.com/products.asp
(jeg har ikke selv prøvet at arbejde med det)

Og sidst - men ikke mindst - top ten development tools. der er nogle rigtig fede imellem, og de kan alle bruges til noget fornuftigt (nok derfor de er på top 10 listen :o)
http://msdn.microsoft.com/msdnmag/issues/04/07/MustHaveTools/default.aspx
(nogle af dem er endda blevet bygget ind i den nyeste version af VS - altså 2005 beta... f.eks. NUnit, hvor MS sådan set bare har "købt" ham der har lavet det :o)

Men sig endelig til hvis du mangler noget af den ene eller anden art - værktøjer eller info.

Held og lykke, og god fornøjelse med det :o)

mvh
Avatar billede snepnet Nybegynder
20. oktober 2004 - 08:20 #11
(du skal selvfølgelig også have det direkte link til deres architecture center... der er også gode ting at hente der)

http://msdn.microsoft.com/architecture/

mvh
Avatar billede mach3 Nybegynder
20. oktober 2004 - 08:59 #12
snepnet >> Det er virkelig dejligt at få så kanon input - jeg siger mange tak! -og vender højst sandsynligt tilbage :-)
Avatar billede snepnet Nybegynder
20. oktober 2004 - 20:58 #13
Mange tak for de pæne ord - jeg håber du får lavet et godt projekt, og jeg håber jeg kan hjælpe hvis du går i stå med et eller andet.
mvh
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