Avatar billede unknown_someone Juniormester
17. februar 2005 - 16:39 Der er 11 kommentarer og
2 løsninger

postback - opdater rigtig

Jeg har en aspx side med en masse formfelter på. et af formfelterne er en dropdownboks og når jeg vælger et af de punkter i dropdownboksen skal der udføres en bestemt handling. Handlingen er sat i min codebehind-fil og sammen fungerer det fint når siden testes for sig selv.

aspx-siden skal også bare kunne fungere når den bliver inkluderet i en anden aspx-side - det gør den vha server.execute og det kan jeg ikke umiddelbart ændre på. problemet er bare at når siden bliver inkluderet og jeg vælger noget i dropdownboksen så udføres min handling godt nok korrekt men til gengæld bryder jeg ud af den side der inkluderer siden med dropdownboksen og tilbage er kun den aspx-side som formen ligger på.

Fx kunne mit link se sådan ud;

www.domain.dk/bestil

og den side indeholder så min default.aspx som inkluderer form siden. når jeg så har valgt noget i dropdownboksen står jeg tilbage kun med formsiden og på dette link

www.domain.dk/bestil/files/formside.aspx

kan jeg ændre på det - og hvordan?
Avatar billede burningice Nybegynder
17. februar 2005 - 16:55 #1
du skal have lavet den side som dropdownlisten ligger på om til en usercontrol (ascx) og tilføje den til din aspx side's control-collection. Problemet er at aspx-sider ikke er lavet til at blive inkluderet på andre aspx-sider, og derfor arbeder din første side uafhængigt af den side den evt. måtte være blevet inkluderet på da den ikke har nogen chance for at vide at den er blevet inkluderet.
Avatar billede unknown_someone Juniormester
17. februar 2005 - 17:39 #2
Der er slet ikke nogen form for workaround der gør at jeg kan beholde min aspx-side og opbygning som nu?

grunden er, at hele systemet er bygget op på at en default.aspx-fil som ligger i roden inkludere en masse andre aspx-sider ud fra nogle parametre - dog kun én fil af gangen;

Server.Execute("/" & var1& "/" & var2 & var3 & ".aspx", textWrite)
includesite.text = textWrite.toString

Hvis det nu skal ændres til at jeg kører ascx-filer - hvad kræver det så reelt af ændringer? både i forhold til default.aspx og til alle de filer jeg inkluderer? nogle af filerne jeg inkluderer er rene aspx-sider hvor andre er aspx plus en codebehind-fil.

det skal lige siges at jeg er ny indenfor .net - og derfor ikke helt kender til ascx endnu :-/

vil gerne lægge flere point i det hvis det er :-)
Avatar billede a1a1 Novice
17. februar 2005 - 17:45 #3
ascx er usercontrols, det er egentligt bare "alm" aspx filer men der er ikke noget form tag og <head><body> osv....

du kan bruge dem på denne måde (i stedet for server.execute) på din default.aspx side:
If ditten then
Page.LoadControl("login.ascx")
else if datten then
Page.LoadControl("frontpage.ascx")
end if
Avatar billede a1a1 Novice
17. februar 2005 - 17:46 #4
det var vel et svar ;o)
Avatar billede unknown_someone Juniormester
17. februar 2005 - 18:25 #5
mine nuværende aspx-sider (dem der includes) har heller ikke body-tag da den jo inkluderes i en anden fil - men vil den eneste ændring så være at jeg fjerner form-tagget og så inkluderer filen som du foreslår?
Avatar billede burningice Nybegynder
17. februar 2005 - 18:41 #6
yearh.. og så lige at omdøbe dem til ascx...

lad mig gætte, du kommer fra en asp eller php baggrund? Måske du skulle læse lidt mere teori for at få den beste udnyttelse af asp.net.

http://www.dotnetjunkies.com/quickstart/aspplus/doc/webpagelets.aspx
Avatar billede unknown_someone Juniormester
17. februar 2005 - 18:59 #7
kommer fra en asp-baggrund og det er en kæmpe kæmpe ulempe. jeg har læst en del bøger med asp.net men når man ikke sidder og får noget til at virke synes jeg det er utrolig svært at forestille sig i praksis når man har asp i baghovedet. Det er også derfor jeg nu sidder og må eksperimentere mig lidt frem. Der er mange ting i .net som jeg syntes lyder utrolig smart når man sider og læser om det - men når man så sidder og udvikler kan det være lidt svært at se hvor og hvordan man egentlig skal udnytte de muligheder der gives og så falder man alt for let tilbage på asp-tankegangen.

Men - det vil altså sige, at jeg kan eller rettere skal ændre min måde at inkludere filer på, ændre aspx til ascx, fjerne form-tagget på de sider der har det og så burde "alle" mine ting teoretisk set virke som altid plus at det problem jeg skrev om i spørgsmålet vil blive løst?
Avatar billede burningice Nybegynder
17. februar 2005 - 19:03 #8
ja... :) du skal forresten også lige ændre dit <%@ Page %> tag til <%@ Control %> og den classe du arver fra (Codebehind) skal nedarve fra UserControl og ikke Page

:)
Avatar billede burningice Nybegynder
17. februar 2005 - 19:06 #9
asp.net er rigtigt smart, men noget mere komplekst end asp. Det gør at det kan være ret træls at lave små simple ting, men utrolig kraftfuldt når man skal lave lidt større ting.

Nøgleordet er overblik, og planlægning. Hvis man ikke planlægger før man går igang med at lave et site kan man pludselig ende i en blindgyde og enten starte forfra eller begynde at hacke sig ud af det. Sådan noget skete sjældent i asp.
Avatar billede unknown_someone Juniormester
17. februar 2005 - 20:59 #10
der er ikke så meget andet for end at jeg må prøve at lege lidt med det - desværre kan det først blive i løbet af i morgen.

en afsluttende ting (forhåbentlig) hvis der er en der kan give en kort men god forklaring. nu siger i at ascx-filen er en usercontrol - men hvad betyder det reelt og på hvilken måde fås den største fordel ved det?

svarer det lidt til at bruge include file/virtual i alm asp - altså en form for genbrug af kode - samt netop det jeg er ude i altså hvor man har én styrende fil (default.aspx) der kan inkludere andre sider eller?
Avatar billede burningice Nybegynder
17. februar 2005 - 21:07 #11
yearh... usercontrols er afløser for det game include/server.execute system. En usercontrol optræder som selvstændigt object og kan have sin egen kode der udføres lige meget hvilken side den inkluderes på. Men i og med den optræder i sidens kontrolhireaki kan man fra siden den er inkludere på lave triks som

this.FindControl("idetPåUserControl").FindControl("idetPåEnTextBox").Visible = false;

eller på usercontrollen kan man få fat i den side den er inkluderet på :

this.Page.FindControl("idetPåEnLoginUserControl").Visible = false;

osv. osv.
Avatar billede unknown_someone Juniormester
18. februar 2005 - 09:31 #12
det lyder jo rigtig godt og spændende.

Nu spørger jeg sikker dumt, men;

lige nu har jeg én default.aspx side som ud fra hvad der står i adressen inkludere én anden side. dvs at default.aspx altid er master og altså altid vises for brugeren.

Alle de sider der inkluderes hedder .aspx - nogle af siderne er sådan set rene html-sider og eneste grund til at de hedder .aspx er at gøre inkluderingen så dynamisk og let som overhovedet muligt. Resten er "rigtige" .aspx sider som har fx databasetilgang eller andet.

Det jeg vel skal over i nu er KUN at have én .aspx-side - nemlig min default.aspx - og alle de øvrige sider skal være en usercontrol og altså omdøbes til .ascx. Er det korrekt?

læg gerne også et svar :-)
Avatar billede burningice Nybegynder
18. februar 2005 - 09:39 #13
yeah... det er korrekt :)

på din master side kan du så have en <asp:placeholder> der hvor usercontrollorne skal indsættes og i din codebehind have denne kode:

void Page_Load(object sender, EventArgs e) {
  string qry = Request.Querystring["pageToShow"];

  dinPlaceholder.Controls.Add(Page.LoadControl(qry +".ascx"));

}
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