Hallå! Det första som slår mig är, varför??? Varför inte utnyttja det som finns tillgängligt i .NET ramverket? Det är för mig oförståeligt. Det har inget med "ren" n-tier att göra. Jag kör ren n-tier men använder de kontroller som erbjuds i presentationslagret. Däremot så använder jag starkt typade collections och klasser istället för t.ex. DataSet osv. Jag måste hålla med patrik. Du försöker köra "vanliga asp" på .net framework och utnyttjar inte saker så som databinding, usercontrols etc. Jag förmodar att du har arbetat dig igenom http://www.asp.net/Tutorials/quickstart.aspx materialet? 6månader utan att ha fått grepp om asp.net låter som en väldigt lång tid. Har du funderat på att investera i en ASP.NET book ? ASP.NET Unleashed ska visst vara en vääääldigt bra bok. Patrik, Andreas, Personligen så tycker jag nog att du ska ta ett par steg tillbaka och ta en ny väg. Det känns inte som att du utforskat vad man kan göra med utan du är fast i det tänk man hade med "gammal" ASP. Under det här halvåret du hållit på med .NET, har du läst böcker, artiklar osv. om Best Practices?Att använda frameset i ASP.NET är väl som att svära i kyrkan...
Har slitit mitt hår, slagit sönder tangentbord, dunkat i bordet, svurit, gjort femtielva projekt, spenderat ett o-tal timmar på internet för att läsa, lära och försöka förstå.
Vad är problemet? Jo, det heter run-time - eller som en del kallar det "do it programatically".
Jag håller på med ett projekt där i princip 95% av hela siten kommer att byggas upp dynamiskt - run-time. Jag har ingen databaskoppling på sidan, utan jag går genom en komponent som gör allting. Jag binder inget data till gridar, repeaters eller annat. Jag vill ha full kontroll i koden på vad jag gör. Jag har verkligen givit flat-layout en chans men kan inte se hur den skulle kunna hjälpa mig.
När jag listar något bygger jag upp det med tables, rows, och cells. Pagingen är helt eget hack. Det fungerar. Men när jag har testat att göra usercontrols och ladda dessa dynamiskt så är det så många konstiga saker som inte lirar, jämfört med att köra i EN aspx-sida i ett frameset. Jag lägger till mycket olika linkbuttons, buttons, dropdowns, textboxes, links etc och alla dessa läggs till dynamiskt med event-handlers. So faar so good.
Jag använder en egen page-class för att ta hand om olika saker som inloggningar etc. Jag har skrivit en egen modul som hanterar viewstate i session istället för i formen (mycket smidig sak som sparar transfertid).
Mitt dilemma är alltså att jag vill så gärna hantera allt i flat-layout, men det går inte. Jag har iaf inte lyckats hitta något bra sätt att lösa allt på. Har läst MYCKET på internet om Templated pages, dynamic user controls, dynamic controls, server controls osv. Har kört IBuySpy och studerat källkoden och boken (finns en bok om IBuySpy).
Jag har jobbat med ASP 3.0 sedan den släpptes och gick över till .NET för ett halvår sedan. Antingen är jag extremt korkad och ologisk, eller också är det så att ASP.NET är mer gjord för design-time än run-time.
Jag har alltså gått tillbaks till ett traditionellt frameset, om än dynamiskt skapat.
Ni får skrika åt mig, slå mig, bua ut mig, men jag har faktiskt försökt och inte lyckats. Jag har också letat efter böcker som BARA hanterar run-time programering. Men alla böcker jag har hittat om VB/ASP.NET utgår ifrån att man använder inbyggda controllers, gridar o annat som man fyllar från en SQL-server. Ingenting om ren n-tier m.m.
Är det någon här som känner likadant men kommit över "tröskeln"? Jag vore enormt tacksam om det finns någon som har bra och uppdaterade exempel på ovanstående (om det är någon som förstår vad jag menar).
Tack på förhand,
En frustrerad Fredrik som fortfarande hänger kvar i frameset...Sv: Att använda frameset i ASP.NET är väl som att svära i kyrkan...
Nåja, du har säkert någon anledning, som jag förmodligen aldrig kommer förstå. ;)
I vilket fall som helst.
Vad gäller frameset så har jag själv ett par sajter där jag använder det. Anledningen? Designers. Räcker det som förklaring? ;)
Vad jag inte förstår är ditt problem. Vad är problemet? Vad är det som inte fungerar i flat-layout? Själv så använder jag templates. Mina första applikationer för ca 2 år sedan körde jag först i frames och sedan bytte jag ut dessa mot userkontroller.
När det gäller templates så sätter du PlaceHolders i din mall och sedan fyller du dessa PlaceHolders med kontroller. Det kan vara Labels, Images, eller egna User kontroller.
Själv så använder jag Paul Wilsons MasterPages för templates. Började bygga en egen men för att spara tid så kör jag hans istället, plus att den fungerar väldigt bra.
Så återigen, vad är ditt problem? Vad är det som inte lirar i dina userkontroller? Att lägga till en user kontroll dynamiskt sker på samma sätt som de inbyggda kontrollerna.
Vad du däremot INTE kan ha är en FORM tagg med runat="server" i din kontroll. Detta eftersom du endast kan ha ETT server-FORM på varje sida.
/pD
www.pdc.se
www.pdc.se/blog
www.patrik-dahlen.nuSv: Att använda frameset i ASP.NET är väl som att svära i kyrkan...
//AndreasSv: Att använda frameset i ASP.NET är väl som att svära i kyrkan...
Tack för era svar. Jag har inte direkt något fel, utan det är förmodligen jag som har dåligt tålamod. Låt oss ta ett exempel.
Jag ska lista produkter baserat på ett visst kriterie. Kriteriet får jag genom en user input. Resultatet ska innehålla lite länkar till produktdetalj, köpknapp, paging, sortering, filtrering, gruppering osv. Rätt vanligt förekommande kan jag tänka mig. Idag gör jag följande:
Tar emot kriteriet
Kriteriet skickas till BusinessLayer
Får tillbaka en SQL-sats från BusinessLayer (hela queryn kommer därifrån eftersom samma söksätt används i windows-versionen)
Jag gör det till en DataView
Cachar dataviewn
Nu kommer jag på hela sidan (så länge det är postbacks) att läsa dataviewn från cachen istället för att läsa om från SQL-servern).
Användaren kan nu gruppera om, sortera om, filtrera, page:a, välja kolumner osv.
Jag har ritat upp allt med tables, rows och cells. Det går otroligt snabbt och smidigt.
Om jag nu ska göra detta med en grid så kan jag inte göra item-templates i design-mode eftersom jaginte alltid vet vilka kolumner jag får tillbaka i min query. Ibland kanske jag får ett extra fält som ska visas osv. Utöver detta så har användaren möjlighet att välja olika fält som han/hon vill se/inte se. Detta gör alltså att en vanlig repeater inte skulle funka (vad jag kan se). Layout styrs via CSS.
Jag har hört om dynamiskt skapade grids, men har aldrig hittat bra kodexempel som behandlar detta.
Läste "An Extensive Examination of the DataGrid Web Control" (http://aspnet.4guysfromrolla.com/articles/040502-1.aspx) från 4GuysFromRolla och där tar dom upp grid i run-time, men skriver såhär om dynamiska kolumner:
"There is a way to specify these bound columns programmatically, but it's really ugly and requires tons of code!"
Allt som står. Sedan är det bara design-time i resten av guiden.
Känner mig som en amatör...
Vet inte om ni förstår, men jag trodde att grid/list/repeater skulle kunna vara mer run-time-vänliga så att säga.
När det gäller LoadCOntrol("abc.ascx") på flera ställen på en sida är jag lite orolig för prestanda. Vissa sidor har information som läses från databs (BusinessLayer) varje gång sidan laddas. Om jag kör flat-layout så måste jag ladda om den varje gång. Om jag har 1000 concurrent users så blir det ganska mycket access till databasen.
Nåväl, jag lär nog komma till insikt vad det lider, men det känns som att ASP.NET ger så otroligt många möjligheter och man kan göra saker på 1000 olika sätt. Detta tycker jag gör det svårt att välja rätt väg. Jag vet, man måste titta på vad applikationen ska användas till, men samtidigt måste jag ju prova olika metoder innan jag kan hitta en som passar mina behov.
Missförstå mig inte, jag tycker .NET-plattformen är överlägsen på alla sätt, bara det att jag förmodligen inte givit den en RIKTIG chans och/eller inte hittat alla sätt att göra saker på.
/FredrikSv: Att använda frameset i ASP.NET är väl som att svära i kyrkan...
Dels så rekommenderar jag asp.net QuickStart. Bland böcker så är ASP.NET Unleashed en suverän bok. Min favoritbok just nu är Real World ASP.NET Best Practices.
När det gäller just DataGrid så finns det en väldigt bra artikelserie i 15 delar på http://aspnet.4guysfromrolla.com/articles/040502-1.aspx
"Om jag nu ska göra detta med en grid så kan jag inte göra item-templates i design-mode eftersom jaginte alltid vet vilka kolumner jag får tillbaka i min query. Ibland kanske jag får ett extra fält som ska visas osv. Utöver detta så har användaren möjlighet att välja olika fält som han/hon vill se/inte se. Detta gör alltså att en vanlig repeater inte skulle funka (vad jag kan se). Layout styrs via CSS."
Detta skulle kunna lösas med klasser, starkt typade collections och AutoGenerateColumns på ditt DataGrid. Du nämner även prestanda och då ska du absolut skippa dina DataViews. Filter och Sorting i en DataView är väldigt prestandakrävande. Jag har bytt ut mina DataTables och Views mot starkt typade collections.
Man ska självklart hitta det sätt som passer en själv men var inte rädd för att rensa skrivbordet och börja om från början. Läs även artiklar och böcker om just Best Practices och som du gör nu, ställ frågor i forum. Det finns många som har varit nere samma vägar som du och gjort samma saker och sedan hittat andra bättre lösningar.
Under de 3 åren jag pysslat med .NET så har jag ändrat arbetsmetodik ett flertal gånger. Just nu så är jag helt inne på total objekt-orientering.
/pD
www.pdc.se
www.pdc.se/blog
www.patrik-dahlen.nu