Tjena! Du har stött på det som jag "retat" mig på under hela min utvecklingstid i asp.net. Hej, tack för ditt svar. Uppföljning och disclamer:Nå javascript-rutiner
Vi säger så här, jag har en sida med två frames. En frame längst upp med lite fält och en knapp för inloggning, och en frame där själva huvudsidan visas.
När man trycker på knappen och försöker logga in vill jag:
*Nå min codebehind för att bl.a. kunna verifiera vem användaren är, sätta en del Session-variabler o.s.v. Inga problem.
*Få den sida som visas i huvudframen att ändras. Här faller jag.
Har joxat hit och dit men får inte rätt på det, hade jag kunnat trigga en javascript-funktion hade det varit piano, men det lyckas jag inte med!
Ungefär samma problem som att få upp javascript-popups på order från code-behind.
Vad göra!?
Evigt tacksam...
Mvh
Carl JohanSv: Nå javascript-rutiner
Den workaround som JAG kommit på (det finns säkert andra bättre) är följande.
Jag har två frames. En topframe och en mainframe (blink till alla stordatorfanatiker). I den översta framen ligger just en inloggningsknapp eller liknande.
Ett knapptryck innebär följande.
1. Formuläret postas.
2. Inloggning verifieras.
3. Ok, jag skapar ett javascript serverside med hjälp av RegisterClientScriptBlock.
Scriptet har dessutom redan fixats ett anrop för i HTML-koden för aspx-sidan. Anropet ligger i body.
4. Sidan returneras till klienten och javascriptet kickar in vid OnLoad.
5. Scriptet sätter document.location.href på sidan som befinner sig i ramen inunder vilket innebär att den sidan också postas.
Hepp!
Inte så smidigt men det funkar.
Jag märkte också att man fick LITE smidigare utseende på det hela om man satte page.Buffer = "false" på sidan längst upp i framesettet.
Var det inte ungefär såhär som man var tvungen att göra i asp också då man inte kan sätta en target på en redirect?Sv: Nå javascript-rutiner
Några följdfrågor:
Du menar alltså att man via RegisterClientScriptBlock lägger till en funktion i top-frame-sidan som ändrar document.location.href, och som anropas av BODY-onLoad?
Blir det inte fel t.ex. när sidan laddas första gången, och man inte lagt till detta script än, för då vill ju onLoad anropa en fkn som inte finns?
Kommer scriptet man lägger till bli en permanent del av sidan därefter? Dvs kommer main-sidan via onLoad-scriptet i top-sidan laddas om varje gång det blir en postback i top-sidan?
Hade också önskat mig ett "target"-attribut i redirect... =)
Hoppas du förstod mina frågor, tack igen!
Mvh
Carl JohanSv: Nå javascript-rutiner
------------------------------
Jag vill ännu en gång poängtera för alla läsare av denna tråd att den lösning som jag föreslagit är ett s k HACK. Det följer knappast några vettiga rutiner eller riktlinjer och påstå för guds skull inte att något skulle vara mitt fel om ni använder det i jobbsammanhang.
Back to the show:
---------------------------
>Du menar alltså att man via RegisterClientScriptBlock lägger till en funktion i top-frame-sidan som ändrar >document.location.href, och som anropas av BODY-onLoad?
Japp!
>Blir det inte fel t.ex. när sidan laddas första gången, och man inte lagt till detta script än, för då vill ju >onLoad anropa en fkn som inte finns?
Vem har sagt att det inte finns ? :-) I första laddningen (page.IsPostBack = FALSE) så låter du skriptet göra... Ingenting!
>Kommer scriptet man lägger till bli en permanent del av sidan därefter? Dvs kommer main-sidan via >onLoad-scriptet i top-sidan laddas om varje gång det blir en postback i top-sidan?
Ja om du inte ser till att det inte blir så och om du fortfarande har samma .aspx-sida.
>Hade också önskat mig ett "target"-attribut i redirect... =)
Vem gör inte det.
Jag säger det igen: Det ÄR ingen smidig lösning och det är heller ingen överraskning att man numera sällan ser just frames hos websiter med ändelsen .aspx