2013-01-17 15 views
6

मुझे केंडो ग्रिड में एक कॉलम के लिए एएसपी.नेट एमवीसी क्लाइंट टेम्पलेट को परिभाषित करने में समस्या है क्योंकि '+' चिह्न छीन लिया जा रहा है, जिसके कारण खराब वाक्यविन्यास के कारण विफल होने के लिए क्लाइंट-साइड जेनरेट टेम्पलेट।एस्केपिंग + (प्लस) साइन इन केंडो ग्रिड एएसपी.नेट एमवीसी क्लाइंट टेम्पलेट

मेरे ClientTemplate है:

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

ग्राहक में, हालांकि, यह करने के लिए कम हो जाता है:

template: "#='Hello' Name#" 

यानी धन चिह्न एक अंतरिक्ष के रूप में प्रदान की गई है (URL एन्कोडिंग मुझे लगता है कि के समान)। यदि मैं सीधे जेएस से उपयोग करता हूं तो टेम्पलेट पूरी तरह से काम करता है (यह JSBin देखें)।

क्या कोई जानता है कि मैं + साइन से कैसे बच सकता हूं ताकि मैं इसे क्लाइंट टेम्पलेट में उपयोग कर सकूं?

मैं '\\+' का उपयोग कर से बचने की कोशिश की है (, + के रूप में ही दूसरों हालांकि इस तरह के &#44; 'काम ठीक के रूप में),' \+ '(अवैध सी #), &#43; (के रूप में' \ 'गाया जाता है)।

कोई विचार? धन्यवाद।

संदर्भ के लिए मैं उस्तरा मार्कअप और Q2 2012 केंडो रिहाई उपयोग कर रहा हूँ (अभी तक Q3 उपयोग नहीं कर सकते के रूप में jQuery संस्करण के आधार पर सीमित रूप में हम Telerik से उन्नत कर रहे हैं)

नोट: से पहले किसी को भी पूछता है कि मैं क्यों 'm यह कर, मेरे ClientTemplate वास्तव में अधिक जटिल है, लेकिन यह एक सरल उदाहरण समस्या को वर्णन करने के लिए है :-)

उत्तर

6

एक समाधान मिला (संभवतः एक कामकाज के अधिक)। बल्कि इनलाइन JavaScript मैं एक अलग जे एस समारोह के लिए अपने कोड चले गए और कहा जाता है कि लिखने की तुलना में टेम्पलेट कोड, जैसे से:

#=myFunctionToDoComplicatedStuff(Name)# 

testability, पुनः प्रयोग और यह सामान्य अच्छा अभ्यास के कारणों के लिए, ईमानदारी से कहूं तो शायद दृष्टिकोण है वैसे भी लिया जाना चाहिए। हालांकि कुछ मामूली के लिए यह थोड़ा परेशान है!

0

आप गणित लेने की कोशिश की और कोटेशन के रूप में नीचे के बाहर डालने है:

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

+0

मेरा वास्तविक कोड एक स्ट्रिंग कॉन्सटेनेशन से अधिक जटिल है - एक सशर्त बयान के हिस्से के रूप में कुछ तर्क है जो वास्तव में अंकगणितीय जोड़ करने की आवश्यकता है, इसलिए मुझे + की आवश्यकता है। जेएस को एक फ़ंक्शन में ले जाने और इसे कॉल करने के लिए केवल इतना ही काम करना है कि इसे सभी को एक साथ रखने के लिए टेम्पलेट में ऐसा करना अच्छा लगेगा। चीयर्स। –

0

इसके लायक होने के लिए, मैं बस इसमें भाग गया और इसे ऋणात्मक मूल्य घटाकर हल किया। जैसे:

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

मुझे alternative plus sign का उपयोग कर समाधान मिला है।

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

इस का परिणाम देगा ...

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

आप सिर्फ इतना है कि जमा चिह्नों से एन्कोडिंग मुद्दे से बचा जाता है अपने ClientTemplate में संयोजन करने के लिए एक सरल उपाय की जरूरत है, तो आप इस तरह जावास्क्रिप्ट concat फ़ंक्शन का उपयोग कर सकते हैं:

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

मैं स्रोत की जाँच की कोड , एमवीसी रैपर सभी टेम्पलेट्स पर जेएस को प्रस्तुत करने से पहले HttpUtility.UrlDecode पर कॉल कर रहा है। तो अपने + चिह्न (या किसी अन्य आरक्षित यूआरएल चरित्र) से बचने के लिए, percent encoding का उपयोग करें। इस मामले में %2B

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

v2013.3, src \ Kendo.Mvc \ Kendo.Mvc \ यूआई \ ग्रिड \ कॉलम \ GridColumnBase.cs, लाइन 135. मुझे लगता है यह एक बग है और वे HttpUtility.UrlEncode कॉल करने के लिए मतलब है।

संबंधित मुद्दे