Javascript Functie Aanroepen met C#

Status
Niet open voor verdere reacties.

stonedr

Gebruiker
Lid geworden
11 aug 2003
Berichten
104
Hello allemaal, ik heb een simpele javascript functie die elementen kan in laten faden. Dit doe ik in combinatie met Yahoo YUI.

Het probleem ligt in het verwerken van een functie met behulp van c#.

Mijn oorspronkelijke idee was met een gewone listbox met behulp van de SelectedIndexChanged event de javascript aan te roepen. Om dit te testen ben ik begonnen met een simpele button_click event met daarin de volgende code:

Code:
string fadeScript = "mijnJavascriptFunctie();";

            if (!manager.IsStartupScriptRegistered("myAction"))
                manager.RegisterStartupScript(fadeScript.GetType(), "myAction", fadeScript, true);

Er is een eenvoudigere manier voor een button, namelijk in de page_load de volgende code te plaatsen:
Code:
Button.Attributes.Add("onClick", "return fadeElement();");
Echter heb ik hier niets aan, omdat dit niet gebruikt kan worden met een ListBox waarin items geselecteerd kunnen worden. Vandaar dat ik de eerste code prefereerde.

Het probleem ligt vooral in de postback. De javascript wordt uitgevoerd, alleen wordt helaas de pagina ververst, waardoor de pagina zich weer in een "beginstaat" bevind.

Ook de AJAX ASP.Net library met UpdatePanels bood geen uitkomst.

Hoe kan ik de functie aanroepen met een asp.net button...zonder dat de gehele pagina ververst wordt?
 
Laatst bewerkt:
Ik denk dat het met een asp.net button niet mogelijk is. Deze is namelijk altijd runat="server". Dus gaat deze naar de server.

Misschien moet je het eens proberen met een gewone html "old skool" button proberen. Ik weet niet of het dan wel werkt, maar het is het proberen waard.
 
Dat klopt, het lijkt er idd op dat het niet mogelijk is. Echter heb ik wel een redelijk eenvoudige oplossing gevonden.

Ten eerste maakte ik het html element op de normale manier aan zodat deze door javascript een mooie fade in kon bevatten. Binnen dit element heb ik met AJAX ASP.Net een Update panel geplaatst.

De button of asp listbox kun je naar de server iets laten sturen met behulp van OnClick en
SelectedIndexChanged.

Echter kan je aan beide asp.net elementen zelf nog 2 opties toevoegen. Namelijk OnClientClick en onmouseup ( dit laatste valideerd niet in asp.net...maar werkt wel:shocked: ), om de client side javascript aan te roepen.

Zo wordt de fade in javascript altijd uitgevoerd en wordt alleen het gedeelte in de update panel geupdate.


Button voorbeeld:

Code:
<asp:Button ID="Button2" runat="server" Text="TestKlikker" OnClick="Button2_Click" OnClientClick="fadeElement2()"/>

ListBox voorbeeld:

Code:
 <asp:ListBox ID="ListBox1" runat="server"  onmouseup="fadeElement()" OnSelectedIndexChanged="ListBox1_SelectedIndexChanged">

Helaas bij het laatste voorbeeld werkt de script ook als de gebruiker klikt op de scroll bar van een listbox, vreemde reactie voor de gebruiker maar technisch natuurlijk logisch.

De oplossing daarvoor is dan toch het javascript laten aanroepen door c#.
 
Zelf los ik dit soort problemen altijd op een andere manier op. Ik doe het zo:

- Ik open mijn web-pagina en bekijk in Firefox of IE de broncode.

- Dan zoek ik het control op, dit is dus een HTML-control zoals gerenderd op de client, dus runat="server" staat er dan niet meer bij :-)

- Ik zie dan de ID van het control en maak dan een stukje client-side JavaScript dat op het betreffende control werkt. De JavaScript code maak in dan in het .ASPX-bestand, dus niet in C#.

Werkt altijd.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan