2013-01-17 11 views
6

Ho riscontrato un problema nella definizione di un client MVC ASP.NET per una colonna in una griglia di Kendo perché il segno "+" viene rimosso, il che causa il modello generato lato client da fallire a causa di una sintassi errata.Escaping + (più) accesso alla griglia di Kendo ASP.NET MVC ClientTemplate

mio ClientTemplate è:

c.Template(@<text></text>).ClientTemplate("#='Hello' + Name#") 

Nel client, tuttavia, questo si riduce a:

template: "#='Hello' Name#" 

cioè il segno più è stato reso come uno spazio (simile alla codifica URL immagino). Il modello funziona perfettamente se utilizzo direttamente da JS (vedere questo JSBin).

Qualcuno sa come posso sfuggire al segno + per poterlo utilizzare nel ClientTemplate?

Ho provato la fuga usando '\\+' (ottiene reso come '\ '),' \+' (valida C#), &#43; (lo stesso +, anche se altri, come &#44; 'funzionano bene).

Qualche idea? Grazie.

Per riferimento sto usando Razor marcatura e il rilascio Kendo Q2 2012 (non è possibile utilizzare Q3 ancora come limitata dalla versione jQuery come stiamo aggiornamento da Telerik)

NOTA: prima che qualcuno chiede perché sto facendo questo, il mio ClientTemplate è in realtà più complessa, ma questo è un esempio semplificato per illustrare il problema :-)

risposta

6

Trovato una soluzione (forse più di una soluzione alternativa). Piuttosto che scrivere JavaScript inline ho spostato il mio codice per una funzione JS separato e chiamato così dal codice del modello, ad esempio:

#=myFunctionToDoComplicatedStuff(Name)# 

Per essere onesti, per ragioni di testabilità, riuso e buone prassi generale, questo è probabilmente l'approccio che dovrebbe essere preso comunque. È un po 'fastidioso per qualcosa di banale!

0

hai provato prendendo la media aritmetica e la messa fuori delle citazioni come qui sotto:

c.Template(@<text></text>).ClientTemplate("#='Hello'" + "Name#")

+0

Il mio codice effettivo è più complesso di una concatenazione di stringhe - c'è un po 'di logica come parte di un'istruzione condizionale che ha effettivamente bisogno di fare un'aggiunta aritmetica, quindi ho bisogno del +. L'unico modo per risolvere il problema è spostare il JS in una funzione e chiamarlo, ma sarebbe bello farlo nel modello per mantenere tutto insieme. Saluti. –

0

Per quello che vale, mi sono imbattuto in questo e l'ho risolto sottraendo un valore negativo. Ad esempio:

kendo.parseFloat(Amount) - -kendo.parseFloat(Tip) 
0

Ho trovato una soluzione utilizzando un alternative plus sign.

c.Template(@<text></text>).ClientTemplate("#='Hello' (<span style=\\'font-size: 0.6em\\'>&#10133;</span>{ Name#")

Questo si tradurrà in ...

template: "#='Hello + Name#" 
1

Se avete solo bisogno di una soluzione semplice per fare la concatenazione nel vostro ClientTemplate che evita il problema di codifica con segni più, è possibile utilizzare la funzione di concat javascript come questo:

c.Template(@<text></text>).ClientTemplate("#='Hello'.concat(Name)#") 
9

Ho controllato la fonte codice , il wrapper MVC chiama HttpUtility.UrlDecode su tutti i modelli prima di renderli a JS. Quindi per evitare il tuo segno + (o qualsiasi altro carattere URL riservato), usa percent encoding. In questo caso %2B.

c.Template(@<text></text>).ClientTemplate("#='Hello' %2B Name#") 

v2013.3, src \ Kendo.Mvc \ Kendo.Mvc \ UI \ Griglia \ Colonne \ GridColumnBase.cs, linea 135. Ho il sospetto che questo è un bug e hanno intenzione di chiamare HttpUtility.UrlEncode.

Problemi correlati