Avatar billede jakobg Nybegynder
11. august 2003 - 23:34 Der er 4 kommentarer

JavaScript til at udløse serverside OnChange event

Sprøgsmål:
Hvordan udløser jeg en .NET event vha. clientside JavaScript?

Jeg vil:
Få en ændring i en ASP.NET control lavet clientside med JavaScript til at udløse en "onchange" event server-side.
Jeg kan ikke få følgende kode til at fungere som ønsket:

...
<form id="Form1" method="post" runat="server">
<asp:CheckBox id="CheckBox1" runat="server" AutoPostBack="True"></asp:CheckBox>
<a href="#" onclick="java script: document.Form1.CheckBox1.checked = true;">Check the box!</a>
</form>
...

I min CodeBehind vil jeg så fange CheckedChange event'en:

...
Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged
Trace.Warn("Checked...!")
End Sub
...

Fejlen i ovenstående eksempel er, at hvis man klikker selve checkbox'en, bliver event'en fint udløst (AutoPostback = true). Men hvis man ændrer checkbox'en vha. JavaSript, sker der ingenting - på trods af at der bliver sat flueben i checkbox'en! Det er som om, at ændringer lavet via javascript ikke gælder som userinput.

Eksemplet er en simplificeret udgave af et problem jeg sidder med, hvor jeg anvender en masse javascript til at manipulere data clientside i et tekstfelt, og som der så i sidste ende skal udløse en Change-event (en skjult checkbox ændrer status = CheckedChange event), så jeg kan få postet det hele tilbage server-side.

På forhånd tak for jeres hjælp...

/JakobG
Avatar billede medions Nybegynder
11. august 2003 - 23:43 #1
Det kan du ikke!
ASP.NET er serversided og JavaScript er clientsided, de to teknologier kan ikke komunikere sammen uden videre!


//>Rune
Avatar billede jakobg Nybegynder
12. august 2003 - 00:04 #2
Well, umiddelbart vil jeg da mene, at der ikke burde være forskel på hvordan data bliver manipuleret i browseren.
Hvis man kigger på source-koden som ASP.NET genererer, er det jo også en JavaScript funktion der bliver udløst, som derefter bla. laver et postback til serveren. De to teknologier kommunikerer allerede glimrende med hinanden...

Hvis man ikke ligefrem skal "hacke" sig ind i ASP.NET's måde at gøre tingene på, så må der være en måde, hvor man kan snyde browseren til at tro, at det er brugeren der har ændret i et tekstfelt, og dermed udløse event'en.

Mvh,
/JakobG
Avatar billede odegaard Nybegynder
12. august 2003 - 00:10 #3
Du skal først checke den, og så umiddelbart lave en postback. Eneste måde at kommunikere med serveren fra klienten, er at poste data tilbage.
Avatar billede jakobg Nybegynder
12. august 2003 - 11:08 #4
Hvis jeg bare laver et postback, fanger den formentlig ikke den rigtige event, da det ikke er det ikke er det rigtigt element der udløser event'en.

Jeg har forsøgt at kopiere den stump JavaScript, som .NET laver i det ovenstående eksempel, og så ligge det ind på JavaScript OnClick-event'en på linket. HTML-sourcen, der bliver smidt ud til browseren, kommer til at se sådan her ud:

...
<input id="CheckBox1" type="checkbox" name="CheckBox1" onclick="__doPostBack('CheckBox1','')" language="javascript" />
<a href="#" onclick="java script: __doPostBack('CheckBox1','');">Hello?</a>
...

Nu bliver der postet tilbage til serveren som der skal, men den rigtige event bliver ikke fanget.
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