Communication entre JavaScript et C# dans les applications ASP.NET

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>

Étiquettes: ASP.NET C# JavaScript AJAX WebForms

Publié le 20 juin à 02h50