Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Thomas Lebrun

Tout sur WPF, LINQ, C# et .NET en général !

Actualités

[Silverlight] Accéder au code managé depuis du Javascript

Les applications développées en Silverlight 1.1 possèdent la particularité d'être développées en code manag" (C#, VB.NET, etc...)

Cependant, il est parfois nécessaire de faire appel au Javascript et même de lui passer des paramètres.

Pour que cela fonctionne, vous devez avant tout penser à rendre accessible au code javascript l'instance de l'objet auquel vous voulez accédez. Pour cela, il vous faut utiliser la méthode RegisterScriptableObject qui prend en paramètres:

  • un nom (utilisé comme clé) qui permettra d'y faire référence via le code JS
  • l'instance de l'objet auquel vous voudrez acceder.

public Page()

{

    //Register the scriptable endpoints

    WebApplication.Current.RegisterScriptableObject("ManagedCode", this);

}

Si on regarde la documentation, on y apprend qu'il faut faire cet appel à un endroit de votre code où vous gérez tout ce qui concerne l'initialisation et les tâches de démarrage (par exemple le OnLoad). Cependant, je vous conseille de le mettre plutôt dans le constructeur car sinon, vous risquez d'avoir votre appel trop tard par rapport à l'exécution de votre page... Bref, ce sera à vous de tester Wink

Il nous faut à présent indiquer quelles seront les données qui seront accessibles au Javascript. Pour cela, vous avez la possibilité d'utiliser l'attribut Scriptable, qui va vous permettre d'indiquer que tous les éléments qui porteront cet attribut seront accessibles:

[Scriptable]

public class CustomEventArgs : EventArgs

{

    private string msg;

 

    public CustomEventArgs(string _msg)

    {

        msg = _msg;

    } 

}

Cet attribut peut, comme vous pouvez le voir, être placé sur l'entête de classes, mais également sur l'entête de propriétés, de méthodes et d'évènements:

private string _s = "Hello World !";

 

[Scriptable]

public string MaPropriete

{

    get { return _s; }

    set { _s = value; }

}

Une fois que tout ceci est fait, vous avez pour ainsi dire terminé. En effet, dans le code Javascript de votre application, il ne vous reste plus qu'à récupérer l'instance du contrôle Silverlight et à appeller la méthode/propriété que vous voulez:

var control;
    
function Loaded()
{   
    // Getting Silverlight control instance     
    control = document.getElementById("SilverlightControl");
        
    // Calling the property or metho you want
    alert(control.Content.ManagedCode.MaPropriete);
}

Notez bien l'utilisation de la propriété Content, qui nous permet d'accéder au contenu de notre contrôle Silverlight, ainsi que la propriété ManagedCode, que nous avions utilisé lors de l'utilisation de la méthode RegisterScriptableObject.

Si l'on observe le résultat, on voit que tout fonctionne bien:

image

Bien sur, il est également possible d'échanger des données/intéragir en code JS et code managé lors d'évènements. Imaginez la classe suivante:

[Scriptable]

public class CustomEventArgs : EventArgs

{

    private string msg;

 

    public CustomEventArgs(string _msg)

    {

        msg = _msg;

    }

 

    [Scriptable]

    public string Message

    {

        get { return msg; }

        set { msg = value; }

    }

}

Ainsi que l'évènement définit ainsi:

[Scriptable]

public event EventHandler<CustomEventArgs> NotBothNamedFilledEvent;

Pour utiliser cet évènement, en .NET, nous ferions tout simplement:

if (NotBothNamedFilledEvent != null)

{

    NotBothNamedFilledEvent(this, new CustomEventArgs("You must enter two names !"));

}

Comment faire pour intercepter et réagir à cet évènement .NET en utilisant du Javascript ? Et bien de la même façon que ce que nous avons fait pour la propriété:

control.Content.ManagedCode.NotBothNamedFilledEvent = DisplayNotBothNamedFilledErrorMsg;

Ici, nous attachons la méthode Javascript nommée DisplayNotBothNamedFilledErrorMsg à l'évènement .NET NotBotfFilledNameEvent. Et cette méthode est la suivante:

function DisplayNotBothNamedFilledErrorMsg(sender, args)
{
   alert(args.Message);
}

 Comme vous pouvez le voir, en utilisant args.Message, j'accède à la propriété Message de ma classe CustomEventArgs. Attention, n'oubliez pas que tout ceci est possible parce que vous avez utilisé l'attribut Scriptable Wink

Je vous rappelle donc les 3 étapes nécessaires lorsque l'on veut échanger des données provenant du code managé vers du code Javascript:

  • Utilise RegisterScriptableObject pour rendre l'objet accessible au code JS
  • Utiliser Scriptable sur les éléments auxquels vos voudrez accéder
  • Appeler les éléments que vous souhaitez dans votre code Javascript, sans oublier de passer par la propriété Content + le nom de la clé que vous avez indiqué lors de l'appel à RegisterScriptableObject

 

Voila, j'espère que ce petit article vous sera utile pour vos développements Wink

 

A+

 

del.icio.us tags:
 
Technorati tags:
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Posted: lundi 21 mai 2007 09:19 par Thomas LEBRUN
Classé sous : , , ,

Commentaires

Pas de commentaires

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01

- SharePoint Online: Script PowerShell pour supprimer une colonne dans tous les sites d’une collection par Blog Technique de Romelard Fabrice le 11-27-2018, 18:01