DevExperience

.Net Framework, Embedded Systems & Design Patterns Paolo Patierno's Blog

String.Format : “Input string was not in a correct format”

Oggi, nello studiare il funzionamento del metodo GetCallbackEventReference() della classe ClientScriptManager in ASP.NET mi sono imbattuto nel seguente errore utilizzando il metodo String.Format :

Input string was not in a correct format

Il codice che ha generato il suddetto errore è il seguente :

   1: string callbackRef = Page.ClientScript.GetCallbackEventReference(this, "args", "ClientCallbackFunction", "");
   2:  
   3: string callbackScript = String.Format("function MyServerCall(args) {{0};}", callbackRef);
   4:  
   5: Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "MyServerCall", callbackScript, true);

A che cosa era dovuto il problema ? Banalmente ad una mancanza di un paio di parentesi graffe nel primo parametro della String.Format.

Infatti, utilizzando tale metodo, ho definito il corpo di una funzione JavaScript da immettere nella pagina ASP.NET di ritorno al client. Ovviamente, in JavaScript, le parentesi graffe indicano l’inizio e la fine di un blocco di codice e quindi anche di una funzione, per cui nel mio caso avevo :

"function MyServerCall(args) {{0};}"

come primo parametro di String.Format e dove {0} rappresentava il segnaposto per il contenuto della variabile callbackRef e le altre parentesi graffe indicavano l’inizio e la fine della funzione JavaScript.

Ebbene, poichè le parentesi graffe vengono adottate per definire i segnaposti nel metodo String.Format, se vogliamo introdurre i caratteri “{” e “}” nella stringa stessa è necessario duplicarli, per cui l’errore si risolve riscrivendo il primo parametro di String.Format nel modo seguente :

"function MyServerCall(args) {{{0};}}"

In rosso ho evidenziato le parentesi che ho dovuto aggiungere per evitare l’errore.

Posted: 9 mag 2011 21:24 da Paolo | con no comments
Inserito sotto: , ,