我正在开发一个 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# 结构、[ScriptableTypes]、字典类型等)。每次我收到错误时:

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

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

我知道我可以采取解决方法,例如打电话 HtmlPage.Window.Eval("...") 并将我的 JS 集成作为字符串传递,但我不想这样做。我想传递一个真实的 .NET 类型作为状态参数。

有帮助吗?

解决方案

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top