Как передать объекты в качестве аргумента в JavaScript через HtmlDocument.InvokeScript - PullRequest
4 голосов
/ 08 декабря 2010

Я использую следующее для вызова функции javascript из приложения C # с элементом управления WebBroser

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

Есть ли способ передать объект (кроме string, double и т. Д.) В качестве аргумента в тест функции?

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

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

Вышеуказанные результаты в javascript ниже typeof(args1) возвращает unknown

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

Ответы [ 2 ]

6 голосов
/ 10 декабря 2010

Это, по-видимому, довольно тривиально.Класс SomeObject просто должен быть помечен как COM-объект, подобный этому.

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

Однако нельзя получить доступ к свойствам из Javascript.

0 голосов
/ 08 декабря 2010

моё решение может выглядеть утомленным. но его работа

<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>

и в коде позади

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

если вы используете UpdatePanel, просто используйте элемент управления внутри UpdatePanel.

редактировать

Для передачи аргументов в UpdatePanel, поместите любой элемент управления на панель обновления

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

в js измените document.getElementsByTagName, чтобы получить элемент по id и использовать args.value

...