1

Microsoft ASP.NET AJAX クライアント ライブラリを利用したい Silverlight アプリケーションに取り組んでいます。Silverlight 2 の一部である HTML Bridge を使用してライブラリを呼び出しています。Silverlight は、JavaScript とマネージ コードの間での型の受け渡しをサポートしていますが、問題にぶつかりました。

Microsoft ASP.NET AJAX クライアント ライブラリには「型システム」が含まれており、フレームワークが行うことの 1 つは、パラメーターが正しい型であることを検証することです。私が呼び出している特定の関数はSys.Application.addHistoryPointで、検証コードは次のようになります。

var e = Function.validateParams(arguments, [
    {name: "state", type: Object},
    {name: "title", type: String, mayBeNull: true, optional: true}
]);

すべての種類の CLR 型を状態パラメーターとして渡そうとしました (C# 構造体、[ScriptableTypes]、Dictionary 型など)。エラーが発生するたびに:

"Sys.ArgumentTypeException: タイプ 'Function' のオブジェクトをタイプ 'Object' に変換できません

このエラーは明らかにパラメーターの検証から来ています...しかし、なぜASP.NET AJAXは私の型が関数であると考えるのですか? MS AJAXの型検証を理解している人はいますか?

呼び出すHtmlPage.Window.Eval("...")などの回避策を実行して、JS 統合を文字列として渡すことができることはわかっていますが、そうしたくありません。状態パラメーターとして実際の .NET 型を渡したいです。

4

1 に答える 1

1

私はここでこれのかなり良い概要を見つけました、しかしその概要でさえあなたが言及したものを除いてすべてのシナリオをカバーしているようでした。javascriptオブジェクトは実際には関数であるため(多かれ少なかれ)、これができないのではないかと思います。

文字列を使用して状態オブジェクトを作成できるラッパー関数を作成した場合はどうなりますか?

于 2008-09-16T03:27:09.337 に答える