Dans le développement d'applications ASP.NET Web Forms, il est fréquent de devoir établir une communication bidirectionnelle entre le script côté client (JavaScript) et la logique côté serveur (C#). Voici une synthèse des méthodes les plus efficaces pour gérer ces interactions.
1. Appeler des méthodes C# depuis JavaScript
Méthode A : Expression de liaison directe
Si vous avez besoin d'une valeur simple retournée par une méthode serveur lors du rendu de la page, vous pouvez injecter l'appel driectement dans le balisage.
// Code-behind (Default.aspx.cs)
public string ObtenirVersionSysteme()
{
return "v2.0.4";
}
// Balisage (Default.aspx)
<script type="text/javascript">
const version = "<%= ObtenirVersionSysteme() %>";
console.log("Version du serveur : " + version);
</script>
Méthode B : Utilisation de PageMethods (AJAX)
Cette approche permet d'apeler une méthode serveur de manière asynchrone sans recharger toute la page. Elle nécessite un ScriptManager avec l'option EnablePageMethods activée.
// Code-behind
using System.Web.Services;
[WebMethod]
public static string CalculerSomme(int a, int b)
{
return (a + b).ToString();
}
// Balisage HTML
<asp:ScriptManager ID="SM1" runat="server" EnablePageMethods="true" />
<script type="text/javascript">
function AppelerCalcul() {
// Syntaxe : PageMethods.NomMethode(param1, param2, callbackSucces)
PageMethods.CalculerSomme(10, 20, function(resultat) {
alert("Le résultat est : " + resultat);
});
}
</script>
2. Accéder aux varibales C# depuis JavaScript
Pour transmettre des données du serveur vers le client, l'usage d'un champ masqué (HiddenField) est une solution robuste.
// Côté serveur : assignation d'une valeur
this.hdnConfigValue.Value = "Mode_Expert";
// Côté client : lecture de la valeur
<asp:HiddenField ID="hdnConfigValue" runat="server" ClientIDMode="Static" />
<script>
var config = document.getElementById('hdnConfigValue').value;
console.log(config);
</script>
3. Transférer des données JavaScript vers le C#
Pour envoyer une information générée dynamiquement en JavaScript vers le serveur, on utilise généralement le mécanisme de Postback via un champ masqué ou l'utilisation des Cookies.
Via un HiddenField
// JavaScript : écriture dans le champ
function EnregistrerPosition(x, y) {
document.getElementById('hdnPosition').value = x + "," + y;
}
// C# : récupération après un bouton Click ou Postback
string coords = this.hdnPosition.Value;
Via les Cookies
// JavaScript
document.cookie = "UserTheme=Dark; path=/";
// C#
if (Request.Cookies["UserTheme"] != null)
{
string theme = Request.Cookies["UserTheme"].Value;
}
4. Déclencher du JavaScript depuis le code C#
Le serveur peut ordonner au navigateur d'exécuter une fonction spécifique une fois que la réponse HTTP est reçue par le client, en utilisant la classe ScriptManager.
// C# : Appel d'une fonction JS nommée 'AfficherNotification'
string message = "Opération réussie";
ScriptManager.RegisterStartupScript(this, GetType(), "AlerteUnique", $"AfficherNotification('{message}');", true);
// JavaScript dans la page
function AfficherNotification(msg) {
alert("Notification serveur : " + msg);
}
5. Interaction via les Web Services (.asmx)
Pour des architectures plus découplées, vous pouvez exposer un service web interne et l'appeler via le ScriptManager.
// Fichier DataService.asmx
[System.Web.Script.Services.ScriptService]
public class DataService : System.Web.Services.WebService
{
[WebMethod]
public string GetData(int id)
{
return "Données pour l'ID " + id;
}
}
// Intégration dans la page
<asp:ScriptManager ID="SM2" runat="server">
<Services>
<asp:ServiceReference Path="~/DataService.asmx" />
</Services>
</asp:ScriptManager>
<script>
function ChargerData() {
DataService.GetData(50, function(res) {
console.log(res);
});
}
</script>