Domanda

Sto lavorando su un'applicazione Silverlight in cui desidero sfruttare la libreria client Microsoft ASP.NET AJAX.Chiamo la libreria utilizzando HTML Bridge che fa parte di Silverlight 2.Silverlight ha ottenuto un ottimo supporto per il passaggio di tipi tra JavaScript e codice gestito, ma ora ho riscontrato un problema.

Le librerie client Microsoft ASP.NET AJAX includono un "sistema di tipi" e una delle operazioni eseguite dal framework è verificare che i parametri siano del tipo corretto.La funzione specifica che sto chiamando è il Sys.Application.addHistoryPoint, e il codice di convalida è simile al seguente:

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

Ho provato a passare tutti i tipi di tipi CLR come parametro di stato (strutture C#, [ScriptableTypes], tipi di dizionario ecc.E ogni volta che ricevo l'errore:

"Sys.ArgumentTypeException:L'oggetto di tipo "Funzione" non può essere convertito nel tipo "Oggetto"

Questo errore deriva ovviamente dalla convalida dei parametri...Ma PERCHÉ ASP.NET AJAX pensa che i miei tipi siano funzioni?Qualcuno capisce la convalida del tipo in MS AJAX?

So che posso fare soluzioni alternative come chiamare HtmlPage.Window.Eval("...") e passa la mia integrazione JS come stringhe, ma non voglio farlo.Voglio passare un vero tipo .NET come parametro di stato.

È stato utile?

Soluzione

Ho trovato una panoramica abbastanza buona di questo Qui, ma anche quella panoramica sembrava coprire ogni scenario tranne quello da te menzionato.Mi chiedo se ciò non possa essere fatto perché gli oggetti JavaScript sono davvero funzioni (più o meno).

E se scrivessi una funzione wrapper in grado di creare l'oggetto stato utilizzando una stringa?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top