2010-01-05 3 views
1

Je développe une application Web asp.net mvc qui utilise beaucoup jquery et le principe d'amélioration progressive.Comment initialiser un contrôle silverlight sans utiliser l'appel de service Web

J'ai un besoin pour un contrôle complexe qui a besoin d'accéder au code .net pour fonctionner (en utilisant la réflexion à travers de nombreuses classes). Les choix étaient de dupliquer ce code en javascript (auto-générer si possible), ou utiliser silverlight. Je vais avec l'option Silverlight (au moins pour V1).

La version pré-silverlight de mon contrôle commence comme certains éléments html simples qui sont modifiés par jquery dans la version plus riche. Cependant les exemples que j'ai vus des contrôles silverlight tous rappellent au serveur une fois que la page a chargé pour obtenir leurs données. Ou, si cette donnée est simple, elle utilise le paramètre initParams.

Mes données d'initialisation sont beaucoup plus compliquées que je pense que les initParams peuvent fonctionner et je ne veux pas rappeler au serveur car j'ai déjà ces données.

Alors, quelles sont mes meilleures options?

Répondre

1

Vous pouvez mettre ce que vous voulez dans initParams. C'est juste une chaîne, mais si vous avez un objet complexe que vous voulez passer au contrôle silverlight, vous pouvez sérialiser l'objet en une chaîne, l'introduire dans initParams, puis le désérialiser dans le contrôle silverlight. Alternativement, vous savez que vous pouvez communiquer de javascript dans le code managé dans le contrôle Silverlight (les fonctions doivent être marquées avec l'attribut ScriptableMember)? Sans oublier que vous ne devriez pas être concerné par les appels du contrôle silverlight vers un service Web WCF ou asmx - dans mon expérience, les appels sont très rapides, sauf si vous transférez de grandes quantités de données.

+0

Merci pour votre réponse. Sérialiser un objet dans une chaîne pour le mettre dans l'objet Silverlight en tant qu'attribut fonctionnerait mais cela me semble un peu bizarre. Est-ce une pratique courante? Je ne m'inquiétais pas vraiment de la temporisation du rappel, mais simplement du fait que je retire des données de la base de données, que je les place sur une page Web et que je les enrichis ensuite sur le client. Je ne veux pas casser ce modèle juste pour un contrôle? La méthode javascript était l'endroit où je regardais, je voulais juste savoir ce qui était couramment fait ou si je manquais quelque chose. –

+0

@Chris: Il est difficile de définir ce qui est "commun" puisque SL est relativement nouveau et évolue encore rapidement. Cependant mettre de grandes quantités de données dans initParams a une "mauvaise odeur" à ce sujet, je ne le ferais pas moi-même. Ce qui pourrait être plus typiquement (si une telle chose existe déjà) dans votre scénario est une page HTML AJAX qui s'enrichit d'un plugin Silverlight. Dans les deux cas, la demande de données se produit séparément du chargement du code de présentation et partagerait probablement un service commun fournissant les données. – AnthonyWJones

+0

La sérialisation de l'objet dans initParams n'est pas une pratique courante, c'est juste une option. initParams est conçu pour les choses de base que votre contrôle Silverlight doit absolument commencer. Personnellement, je préfèrerais me fier à l'appel de webservice mentionné ci-dessus, que ce soit directement à partir du contrôle silverlight ou d'ajax et d'un pont javascript. – slugster

1

Dans le scénario que vous décrivez, vous pouvez utiliser le HTMLBridge dans Silverlight pour appeler une fonction javascript dans votre page qui peut fournir les données complexes. Silverlight a des bibliothèques pour gérer à la fois XML et JSON, cependant, la liaison de données Silverlight devient beaucoup plus utilisable lorsque vous chargez ces données dans un modèle fortement typé.

+0

Cela semble très intéressant merci. J'ai déjà mes objets en classes js pour que Silverlight puisse appeler une fonction js, obtenir ces valeurs et se mettre en place. Je vais regarder dedans. –

Questions connexes