1

我正在开发一个希望利用 Microsoft ASP.NET AJAX 客户端库的 Silverlight 应用程序。我正在使用作为 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# 结构、[ScriptableTypes]、字典类型等。每次我收到错误时:

“Sys.ArgumentTypeException:‘函数’类型的对象无法转换为‘对象’类型

这个错误显然来自参数验证......但是为什么 ASP.NET AJAX 认为我的类型是函数?有人了解 MS AJAX 中的类型验证吗?

我知道我可以做一些变通方法,比如调用HtmlPage.Window.Eval("...")并将我的 JS 集成作为字符串传递,但我不想这样做。我想传递一个真正的 .NET 类型作为状态参数。

4

1 回答 1

1

我在这里找到了一个很好的概述,但即使是那个概述似乎也涵盖了除了你提到的那个之外的所有场景。我想知道这是否不能完成,因为 javascript 对象确实是函数(或多或少)。

如果您编写了一个可以使用字符串创建状态对象的包装函数怎么办?

于 2008-09-16T03:27:09.337 回答