Jag har en asp button med följande kod Klura ut det själv, men jag ger dig lite hjälp... Kör du : Jag rekommenderar er båda att börja läsa lite om objektet Page och i synnerhet RegisterClientScript och dess besläktade varianter. (Funderar på att skriva en artikel). Men vad kan man göra? "Jag rekommenderar er båda att börja läsa lite om objektet Page och i synnerhet RegisterClientScript och dess besläktade varianter. (Funderar på att skriva en artikel)." Detta script som du envist skall skriva ut med Response.write, är det något unikt script? Är det ett script du Alltid kan ha på just den sidan? I så fall kan du ju bara lägga till scriptet med funtion i din html och adda ditt attribut så har du inga problem. Jag behöver absolut inte använda response.write! Vi tar allt från början. Jag trycker på en knapp. Du kan ju släcka lagret i din codebehind,det behöver du inget script till. Grejen är det att jag har en <div> tagg i aspx sidan med attributet visibility: hidden Buffer = true är satt som default i IIS5 --> Jag löste problemet med gammalt hederligt javascript :)Kalla på javascript i code behind filen
<asp:Button id="btnDownload" runat="server" Text="Download" CssClass="Button"></asp:Button>
När jag klickar på den kör jag
btnDownload.Attributes.Add("OnClick", "show('info');")
i Page_Load i code behind filen
Show info tänder ett lager och det fungerar bra.
Sen utför jag div funktioner i
Private Sub btnDownload_Click...
När denna kod har kört klart vill jag kalla på
hide('info'); men hjälp av javascript.
Jag försöker med följande utan att lyckas
Response.Write "<script>hide('info');</script>
Hur kallar man på ett javascript från code behind?Sv: Kalla på javascript i code behind filen
response.write körs innan renderingen av sidan i ditt fall, så det hamnar innan allt annat... (Kolla källkoden...)Sv: Kalla på javascript i code behind filen
Response.Write "<script>hide('info');</script>
I din eventmetod för knappen?
Sedan måste du sätta btnDownload.Attributes.Add("OnClick", "show('info'); i ex Page_laod du kan inte lägga till Attributet då dutryckt på knappen, då finns den inte där förrän du trycker andra gången på samma knappa.
vad säger Sourcen (html i ex IE när du ritat upp sidan).
Varför låter du inte javaScriptet finnas där hela tiden?
//Johan NSv: Kalla på javascript i code behind filen
Response.Write tillhör inte det förgångna men det finns smidiga lösningar för de problem ni ställer upp. Om inte annat kan "krycklösningar" med .write vara bra att undvika om någon annan behöver jobba med eller i "din" kod.
//Mikael.NETSv: Kalla på javascript i code behind filen
Jag kan ju inte veta att (i det här fallet så packas en fil ihop och streamas upp till klienten) filen har packats och streamats förrän koden i suben btnDownload_Click har utförts...Sv: Kalla på javascript i code behind filen
Behövs inte då jag jobbat med code review av Wrox .Net böcker. Och är väldigt aktiv innom .Net i allmänhet. Så du behöver absolut inte läxka upp mig. Tack för omtanken i alla fall.
Dock svarade jag på hans fråga för att ge info hur hela utföranet går till. Att i detta skede slänga in exempel på RegisterClientScript anser inte jag direkt passande. men visst kan han köra med det om han vill. Eller bara helt enkelt slänga in Scriptet direkt på sin HTMl sida då det troligen inte behöver någon scriptregistrering,Det räcker helt enkelt med att lägga till attdrubutet. Det var gruden till mina frågor för att ge honom i senare svar ett förslag på en lösning.
RegisterClientScript är bla väldigt lämpat i de fall då man skall rita ut en o samma control där controllen genererar ett script.
//Johan NSv: Kalla på javascript i code behind filen
Om du vill kan du ju krångal till det genom att använda scriptregistrering, men det tror jag knappast du behöver i ditt fall.
//Johan NSv: Kalla på javascript i code behind filen
Det enda jag vill åstadkomma är att kalla på min javascript funktion efter att all kod utförts.
function hide(id) {
bla...
}
Som redan finns i aspx sidan.
Problemet är bara att jag inte vet vad jag ska använda för metod för att kalla på denna funktion från code behind sidan efter att all kod utförts.Sv: Kalla på javascript i code behind filen
Du har en function i ett javascript. Denna funktion vill du köra när en medot har utförts?
Alltså.
1... Du tycker på en knapp.
2... Rutiner utförs
3... När dessa är klara skall scriptet triggas?
Har jag förstått rätt då? Så det attribut du la till var bara en test? Du vill inte att scriptet körs när du trycker på knappen?
//Johan NSv: Kalla på javascript i code behind filen
I Page_Load tänder jag ett lager med text (Vänligen vänta...)
btnDownload.Attributes.Add("OnClick", "show('info');")
När all kod sen har utförts så vill jag släcka lagret med min funktion hide('info')
??Attributes.Add("??", "hide('info');")Sv: Kalla på javascript i code behind filen
Dock kommer du få andra problem och det är hur du skall få ut den data du vill ha då allt sker på serversidan. Servern returnerar inget resultat förren hela knapp eventets metod genomförts. Det betydER att du kommer alldrig få se ditt lager. Då servern sickar datan til dig så fort metoden genomförts.
vad mer gör du i metoden? är det i den du nyttjar din rita ut valideringsrutin?
Om du vill ha progressbar eller liknande så får du bygga en fejkad sådan. Hämta all data (vilket går rätt fort) sedan köra ett script som låtsas att detta utförs och sedan presentera det hela.
//Johan NSv: Kalla på javascript i code behind filen
Så fort jag klickar på submit knappen sätter jag visibility: visible med
btnDownload.Attributes.Add("OnClick", "show('info');") i Page_Load
Detta fungerar som sagt bra.
Känns otroligt dåligt att det inte ska gå att utföra koden i btnDownload_Click eventet och sen skicka upp datat till klienten.
I gamla asp så var det ju bara att sätta response.Buffer = True, kalla på show('info')
Skriva Response.Flush (visning av lager kom upp)
och sen utföra den kod som skulle utföras och sen kalla på hide('info') och sen köra Response.Flush igen. (Lagret släcktes)
Finns det inget sätt att buffra sidan tills allt är utfört och köra flush på liknande sätt som i gamla asp?Sv: Kalla på javascript i code behind filen
Du kan köra med Response.Flush om du vill, i din eventmetod.
Tänk bara på prestandan. Att servern arbetar rätt tungt då den skall skicka en massa
data till klienten hela tiden. Har du otur kan din process to m. gå så snabbt att det bara kommer att blinka till för användarens ögon.
men den fungerar inte på ontroller. Då dessa streamas ut så fort de är klara.
//Johan NSv: Kalla på javascript i code behind filen
I <body> taggen satte jag onfocus="hide('info')"
Detta resulterar i att när jag klickar på "save" i windows nedladdningsruta så tappar jag focus på aspx sidan och då släcker jag lagret.
Inte så snyggt men lagret tänds och jag visar att packning av fil pågår.
När filen sen streamats upp till klienten så klickar användaren på "Save el Cancel" i windows nedladdningsruta och tappar focus = släcker ned lagret.