将Silverlight类型传递给Microsoft AJAX并通过参数验证
时间:2020-03-05 18:49:52 来源:igfitidea点击:
我正在开发一个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类型作为状态参数(Cstructs,[ScriptableTypes],Dictionary类型等)进行传递。每当出现错误时:
"Sys.ArgumentTypeException: Object of type 'Function' cannot be converted to type 'Object'
该错误显然是由于参数验证引起的...但是,为什么ASP.NET AJAX认为我的类型是"函数"?有谁了解MS AJAX中的类型验证?
我知道我可以做一些变通办法,例如调用HtmlPage.Window.Eval(" ...")
并将我的JS集成作为字符串传递,但是我不想这样做。我想传递一个真正的.NET类型作为状态参数。
解决方案
回答
我在这里找到了相当不错的概述,但即使我们提到的概述,该概述似乎也涵盖了所有情况。我想知道是否不能做到这一点,因为javascript对象实际上是函数(或者多或者少)。
如果编写了可以使用字符串创建状态对象的包装器函数,该怎么办?