我正在开发一个Silverlight应用程序,我想利用Microsoft ASP.NET AJAX客户端库。我使用属于Silverlight 2的HTML Bridge调用库.Silverlight非常支持在JavaScript和托管代码之间传递类型,但现在我遇到了问题。
Microsoft ASP.NET AJAX客户端库包含“类型系统”,框架所做的一件事就是验证参数的类型是否正确。我正在调用的特定函数是Sys.Application.addHistoryPoint
,验证代码如下所示:
var e = Function.validateParams(arguments, [
{name: "state", type: Object},
{name: "title", type: String, mayBeNull: true, optional: true}
]);
我已经尝试将各种CLR类型作为状态参数(C#structs,[ScriptableTypes],Dictionary类型等)传递。每次我收到错误:
“Sys.ArgumentTypeException:'Function'类型的对象无法转换为'Object'类型
这个错误显然来自参数验证......但是为什么ASP.NET AJAX认为我的类型是函数?有谁知道MS AJAX中的类型验证?
我知道我可以像调用HtmlPage.Window.Eval("...")
那样做变通办法,并将我的JS集成作为字符串传递,但我不想这样做。我想传递一个真正的.NET类型作为状态参数。
答案 0 :(得分:1)
我发现了这个here的非常好的概述,但即使是那个概述似乎涵盖了除了你提到的那个之外的每个场景。我想知道这是否无法完成,因为javascript对象确实是函数(或多或少)。
如果您编写了一个可以使用字符串创建状态对象的包装函数,该怎么办?