2010-12-08 47 views
4

J'utilise comme suit pour appeler une fonction javascript d'une application C# avec un contrôle WebBroserComment passer des objets comme argument javascript via HtmlDocument.InvokeScript

webBrowser1.Document.InvokeScript("function", new object[] { "arg" }); 

Est-il possible de passer d'un objet (autre que string, double etc) comme argument au test de fonction?

class SomeObject 
{ 
    int number = 0; 
    string str = "1234"; 
} 

webBrowser1.Document.InvokeScript("function", new object[] { new SomeObject() }); 

Les resuslts ci-dessus dans le javascript ci-dessous typeof(args1) retours unknown

function function(arg1) { 
    alert(typeof(arg1)); 
} 

Répondre

5

C'est apparemment assez trivial. La classe SomeObject doit simplement être marquée comme un objet COM comme celui-ci.

[PermissionSet(SecurityAction.Demand, Name = "FullTrust")] 
[System.Runtime.InteropServices.ComVisibleAttribute(true)] 
class SomeObject 
{ 
    int number = 0; 
    string str = "1234"; 
} 

Les propriétés ne sont cependant pas accessibles depuis Javascript.

+0

Votre réponse fonctionne et résout aussi mon problème. Cependant, même si votre réponse est correcte, il serait bon de savoir comment vous êtes arrivé à cette conclusion. Avez-vous des références que vous pourriez lier qui vous ont amené à cette conclusion? –

-2

mes forces solution semble weired. mais son travail

<script type="text/javascript"> 
function checkArgs(){ 
    var args = document.getElementsByTagName("body")[0].args; 
    if(args) alert(args); 
} 
</script> 
... 
    <body id="body" runat="server" onload="checkArgs();"> 
    ... 
    </body> 

et dans le code derrière

this.body.Attributes["args"] = "my arguments"; 

si u utiliser UpdatePanel, il suffit d'utiliser le contrôle qu'à l'intérieur UpdatePanel.

modifier

Pour passer des arguments à UpdatePanel, soit mettre le contrôle dans le panneau de mise à jour

<input id="args" runat="server" type="hidden"/> 
or 
<asp:HiddenField ID="args" runat="server"/> 

dans le changement js 'document.getElementsByTagName' pour obtenir élément par id et utiliser args.value

+1

Je pense que UpdatePanel fait partie de l'espace de noms Web. Je suis en train de créer une application Windows Forms qui intègre le contrôle du navigateur. J'ai besoin de déplacer les données de l'application C# dans le Javascript hébergé dans le contrôle du navigateur. – Fedearne

+0

c'est une réponse trompeuse. Pas lié à la question et peut conduire les débutants à perdre quelques heures en essayant de l'utiliser. – Tar