Pergunta

Estou trabalhando em um aplicativo Silverlight no qual desejo aproveitar as vantagens da biblioteca Microsoft ASP.NET AJAX Client.Estou chamando a biblioteca usando o HTML Bridge que faz parte do Silverlight 2.O Silverlight obteve ótimo suporte para passagem de tipos entre JavaScript e código gerenciado, mas agora me deparei com um problema.

As bibliotecas de cliente Microsoft ASP.NET AJAX incluem um "sistema de tipos" e uma das coisas que a estrutura faz é validar se os parâmetros são do tipo correto.A função específica que estou chamando é a Sys.Application.addHistoryPoint, e o código de validação fica assim:

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

Eu tentei passar todos os tipos de tipos CLR como parâmetro de estado (estruturas C#, [ScriptableTypes], tipos de dicionário etc.E toda vez que recebo o erro:

"Sys.ArgumentTypeException:O objeto do tipo 'Function' não pode ser convertido no tipo 'Object'

Este erro obviamente vem da validação do parâmetro ...Mas POR QUE o ASP.NET AJAX acha que meus tipos são funções?Alguém entende a validação de tipo no MS AJAX?

Eu sei que posso fazer soluções alternativas, como ligar HtmlPage.Window.Eval("...") e passar minha integração JS como strings, mas não quero fazer isso.Quero passar um tipo .NET real como parâmetro de estado.

Foi útil?

Solução

Eu encontrei uma visão geral muito boa disso aqui, mas mesmo essa visão geral parecia cobrir todos os cenários, exceto aquele que você mencionou.Estou me perguntando se isso não pode ser feito porque os objetos javascript são realmente funções (mais ou menos).

E se você escrevesse uma função wrapper que pudesse criar o objeto de estado usando uma string?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top