Jeg er ikke sikker på at jeg har forklaret mig godt nok, eller ikke forstår hvad du mener, så jeg prøver lige på en gang til. Hvis jeg vil lave en html formular hvor jeg ikke benytter runat="server" kan jeg så ikke bruge codebehind ?
well... det korte svar må være nej, men du kan tilgå forms-elementer på normal vis: object o = Request.Forms["someId"]; ... og sådan noget som dette her vil også funge:
try { // vil gå fint når du trykker på <input type="submit" /> string tekst = Request.Form["someText"]; } catch (Exception) { Response.Write("Nothing there"); }
men altså ... så er du jo bombet tilbage til stenalderen, og det er der vil ikke meget fidus i?
du kan jo så bruge wilson-siden, eller måske usercontrols.... afhængigt af hvad det er du vil opnå (hvad er det for et problem du har?).
Landet ligger jo sådan at jeg kun kan bruge nogle ganske få af de indbyggede controller når jeg ikke har runat="server" med i form tag'en. Og ja det gør livet surt for mig hvad drag'n drop programmeringen angår.
Men MS har lavet den famøse viewstate på alt hvad der overhovedet er af elementer i VS 2005 hvilket laver en større eller mindre viewstate i toppen af siden. Denne kan man så med programmering flytte til bunden af siden så diverse søgemaskiner ikke rammer i den som det første på siden.
Landet ligger så sådan at jeg skal lave et site uden denne "støj" og alt skal laves i div's med tilhørende CSS. Mit business og datalag er der ingen problemer med at lave som jeg altid har gjort, men efter som at opgevestilleren ikke ønsker noget "støj" i den færdigt genereret html kan jeg ikke benytte mig ret meget af de indbyggede controller da disse kræver runat="server" og dermed giver støj på siden.
Normalt vil jeg lavet noget i stil med :
VB Dim Fornavn As String = Fornavn.Text Dim Efternavn As String = Efternavn.Text osv.....
Hvor jeg så med en alm. html form må gøre således :
Dim Fornavn As String = Request.Form("Fornavn") Dim Efternavn As String = Request.Form("Efternavn")
At jeg så skal lave min egen "viewstate" ved hjælp af session's eller andet giver mere programmeringen i sidste ende. Jeg kan heller ikke benytte mig af gridview, treemenu, dropdown list osv.....men når opgaven er som denne må jeg forsøge at løse den bedst muligt.
Men hvis du kan komme i tanke om andre muligheder er du mere end velkommen til at komme med lidt input.
du kan slå viewstate fra... på applikationsniveau, sideniveau og kontrolniveau - så det burde være tilstrækkeligt. du får altid - som du har bemærket - et lille viewstate, men kontroller hvor du angiver viewstate="false" genererer ikke noget i viewstate. visse 2.0 kontroller kan finde på at generere et controlstate, men det er småting - og essentielt for at kontrollen virker. mvh
Og du mener dermed ikke at det skulle have nogen betydning at der stadig genereres den lille viewstate så snart runat="server" er sat på form tag'en ?
For jeg er ret sikker på at opgavestilleren vil benytte sig af en ekstern SEO konsulent efterfølgende og har jeg ikke lavet det optimalt for jeg mere arbejde (uden betaling, IKKE godt *GGG*)
jeg mener at du skal banke ind i hovedet på dem hvordan landet ligger, og hvis du har brug for en hånd til det, kan du bare sige til. ikke forstået på den måde, at jeg forherliger viewstate - bestemt ikke - men det er unægteligt en meget begrænset mængde du får hvis du slår det fra hvor du kan, og det kan også lade sig gøre at gemme hovedparten af det på serveren - specielt hvis du benytter 2.0 er det uhyre enkelt:
// lave en .browser fil (og læg den i App_Browsers) <browsers> <browser refID="Default"> <controlAdapters> <adapter controlType="System.Web.UI.Page" adapterType="CustomAdapters.PageStateAdapter" /> </controlAdapters> </browser> </browsers> mvh
// og en adapter: using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Web.UI.Adapters;
namespace CustomAdapters { public class PageStateAdapter : PageAdapter { public override PageStatePersister GetStatePersister() { return new SessionPageStatePersister(this.Page); } } }
så gemmer den viewstate i din session istedet.
men altså.... et lille viewstate slipper du ikke for på den måde, men hvis de 20 bytes (eller hvor meget det nu er) har en betydning for kunden, bliver du nok aldrig færdig med løsningen alligevel :o)
du er velkommen til at skrive på messenger (kan ikke huske hvad du kalder dig derude :o)
Der hvor jeg ser det nødvendigt med viewstate er egentligt kun på formulare hvor det ofte kan være en fordel. Og da de fleste sider med formulare ligger på et admin modul ser jeg heller ikke de store problemer med det, da disse sider ikke er af interesse for søgemaskinerne.
Ved visning af sider med træk fra database kan jeg godt undvære viewstate ved at slå den fra på side niveau og dermed "kun" få den omtalte 20 byte viewstate som i reglen ikke burde have nogen betydning for SEO
Hvis vi så kigger på en kopi fra en af mine sider :
well... javascriptkoden sætter __EVENTTARGET og __EVENTARGUMENT så du kan samle dem op på serveren, hvor du jo gerne vil kunne abbonnere på et event, og få et argument med på vejen. derefter submitter den formen. koden genereres hvis der er behov for det - altså hvis du har kontroller på formen der skal udføre et postback - og ikke renderes som submit's (som en knap). __LASTFOCUS indsættes hvis du sætter en dropdownlist ind med autopostback = true (måske også i andre situationer). mvh
Ok jeg takker for din hjælp til dette. Jeg vil tage en snak med opgave stilleren om de forskellige ting og skulle disse gå helt i vasken kan det godt være jeg lige teger fat i dig igen ;o)
Med den browser fil du snakked om længere oppe er det så meningen at den gælder for alle browser typer eller skal der være en for hver ?
Og den adapter du beskriver er så en seperat klasse ikke ?
adapterfilen gælder for alle browsere - adapteren er blot en klasse du kan lægge i app_code. du er velkommen til at tage fat i mig, hvis der skulle blive ballade med dem :o) mvh
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.