Вопрос

Я работаю над приложением Silverlight, в котором хочу воспользоваться клиентской библиотекой Microsoft ASP.NET AJAX.Я вызываю библиотеку, используя HTML Bridge, который является частью Silverlight 2.В 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