ध्यान दें कि आप ऐसा कुछ कर सकते हैं (कम से कम MVC3 में):
<td align="left" @(isOddRow ? "class=TopBorder" : "style=border:0px") >
मेरा मानना है कि रेजर जोड़ने वाले उद्धरण वास्तव में ब्राउज़र थे। जैसा कि MVC 4 के साथ परीक्षण करते समय रिस्म ने बताया (मैंने MVC 3 के साथ परीक्षण नहीं किया है, लेकिन मुझे लगता है कि व्यवहार में कोई बदलाव नहीं हुआ है), यह वास्तव में उत्पादन करता है class=TopBorder
लेकिन ब्राउज़र इस जुर्माना को पार्स करने में सक्षम हैं। HTML पार्सर्स लापता विशेषता उद्धरण पर कुछ क्षमा कर रहे हैं, लेकिन अगर आपके पास स्थान या कुछ वर्ण हैं तो यह टूट सकता है ।
<td align="left" class="TopBorder" >
या
<td align="left" style="border:0px" >
अपने स्वयं के उद्धरण प्रदान करने में क्या गलत है
यदि आप नेस्टेड उद्धरणों के लिए कुछ सामान्य सी # सम्मेलनों का उपयोग करने की कोशिश करते हैं, तो आप अधिक उद्धरणों के साथ समाप्त हो जाएंगे क्योंकि आपने रेजर को सुरक्षित रूप से बचने की कोशिश कर रहे हैं। उदाहरण के लिए:
<button type="button" @(true ? "style=\"border:0px\"" : string.Empty)>
यह मूल्यांकन करना चाहिए<button type="button" style="border:0px">
लेकिन रेजर C # से सभी आउटपुट से बच जाता है और इस प्रकार उत्पादन करता है:
style="border:0px"
आप इसे केवल तभी देखेंगे जब आप नेटवर्क पर प्रतिक्रिया देखेंगे। यदि आप एक HTML इंस्पेक्टर का उपयोग करते हैं, तो अक्सर आप वास्तव में DOM देख रहे होते हैं, कच्चा HTML नहीं। ब्राउज़रों HTML को DOM में पार्स करते हैं, और बाद में DOM प्रतिनिधित्व को पार्स करने के बाद पहले से ही कुछ बारीकियों को लागू किया जाता है। इस स्थिति में ब्राउज़र देखता है कि विशेषता मान के आसपास उद्धरण नहीं हैं, उन्हें जोड़ता है:
style=""border:0px""
लेकिन DOM इंस्पेक्टर में HTML कैरेक्टर कोड ठीक से प्रदर्शित होते हैं इसलिए आप वास्तव में देखते हैं:
style=""border:0px""
Chrome में, यदि आप HTML को राइट-क्लिक करते हैं और Edit HTML का चयन करते हैं, तो वह वापस स्विच हो जाता है ताकि आप उन गंदे HTML कैरेक्टर कोड को देख सकें, जिससे यह स्पष्ट हो सकता है कि आपके पास वास्तविक बाहरी उद्धरण हैं, और HTML इनर कोटेड हैं।
तो खुद को रेजर करने की कोशिश के साथ समस्या रेजर इन से बच जाता है।
यदि आप उद्धरणों का पूर्ण नियंत्रण चाहते हैं
उद्धरण से बचने के लिए Html.Raw का उपयोग करें:
<td @Html.Raw( someBoolean ? "rel='tooltip' data-container='.drillDown a'" : "" )>
निम्नानुसार रेंडर करें:
<td rel='tooltip' title='Drilldown' data-container='.drillDown a'>
उपरोक्त पूरी तरह से सुरक्षित है क्योंकि मैं किसी भी HTML को एक चर से आउटपुट नहीं कर रहा हूं। शामिल केवल चर ही टर्नेरी स्थिति है। हालाँकि, सावधान रहें कि यह अंतिम तकनीक आपको कुछ सुरक्षा समस्याओं के लिए उजागर कर सकती है यदि उपयोगकर्ता द्वारा दिए गए डेटा से तार का निर्माण किया जाए। उदाहरण के लिए, यदि आपने डेटा फ़ील्ड से एक विशेषता का निर्माण किया है जो उपयोगकर्ता द्वारा दिए गए डेटा, Html.Raw के उपयोग से उत्पन्न हुआ है, तो इसका मतलब है कि स्ट्रिंग में विशेषता और टैग का समय से पहले अंत हो सकता है, फिर एक स्क्रिप्ट टैग शुरू करें जो वर्तमान में लॉग इन की ओर से कुछ करता है। उपयोगकर्ता (संभवतः लॉग इन उपयोगकर्ता से भिन्न)। हो सकता है कि आपके पास सभी उपयोगकर्ताओं के चित्रों की सूची वाला एक पृष्ठ हो और आप प्रत्येक व्यक्ति का उपयोगकर्ता नाम होने के लिए टूलटिप सेट कर रहे हों, और सभी उपयोगकर्ता स्वयं'/><script>$.post('changepassword.php?password=123')</script>
और अब कोई भी अन्य उपयोगकर्ता जो इस पृष्ठ को देखता है, उनका पासवर्ड तुरंत पासवर्ड में बदल जाता है जिसे दुर्भावनापूर्ण उपयोगकर्ता जानता है।