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

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

Input string was not in a correct format

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

string callbackRef = Page.ClientScript.GetCallbackEventReference(this, "args", "ClientCallbackFunction", "");

string callbackScript = String.Format("function MyServerCall(args) {{0};}", callbackRef);

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 metodoString.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.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s