2011-07-11 13 views
5

एएसपीनेट एमवीसी में, रेजर टेक्स्ट ब्लॉक के बीच अतिरिक्त जगह डालता है। मैं इस तरह एक सूची प्रस्तुत करना चाहता हूं: "1, 2, 3" लेकिन "1, 2, 3" प्राप्त करें।एएसपी.नेट एमवीसी रेजर अतिरिक्त व्हाइटस्पेस

@for (int i = 1; i < 3; i++) 
{ 
    <text>@i</text> 
    if (i != 2) 
    { 
    <text>, </text> 
    } 
} 

क्या अतिरिक्त सफेद जगह को हटाने का कोई तरीका है?

+0

क्यों आप बाद में एक रिक्ति की क्या ज़रूरत है दूसरे ' 'टी में अल्पविराम एजी? –

+4

[asp.net mvc razor अतिरिक्त स्थान] के संभावित डुप्लिकेट (http: // stackoverflow।कॉम/प्रश्न/4282572/एएसपी-नेट-एमवीसी-रेजर-अतिरिक्त-स्पेस) – StriplingWarrior

उत्तर

6

मैं एक सूची इस तरह से प्रस्तुत करना चाहते हैं: "1, 2, 3"

त्वरित और गंदे:

@string.Join(", ", Enumerable.Range(1, 3)) 
बस

public static class HtmlExtensions 
{ 
    public static IHtmlString FormatList(this HtmlHelper html, IEnumerable<int> list) 
    { 
     return MvcHtmlString.Create(string.Join(", ", list)); 
    } 
} 

और उसके बाद: 210

जाहिर है एक कस्टम सहायक ध्यान में रखते हुए कुछ स्वरूपण का काम करने के लिए अधिक उपयुक्त लगता है

@Html.FormatList(Model.MyList) 
1

प्रत्येक बार लूप के चारों ओर अलग-अलग स्थानों में टेक्स्ट के बिट्स लिखने के बजाय, आप StringBuilder में सभी टेक्स्ट जमा कर सकते हैं, फिर लूप के बाहर @stringBuilderObject.ToString() करें।

+2

जो पृष्ठ टेम्पलेट्स का उपयोग करने के पूरे बिंदु का उल्लंघन करता है, क्योंकि इसे स्ट्रिंग अक्षर में HTML को एम्बेड करने की आवश्यकता होती है। यदि आप ऐसा करने जा रहे हैं, तो बिल्कुल क्यों देखें? बस नियंत्रक में पूरा पृष्ठ उत्पन्न करें। –

+0

@ डेविड, मैं एमवीसी के लिए बिल्कुल नया हूं, लेकिन मुझे यकीन नहीं है कि मैं आपकी बात समझता हूं। वह कोई HTML नहीं बना रहा है, सिर्फ सादा पाठ। '' तत्व रेजर के लिए विशिष्ट है, इसका उपयोग सादे पाठ को इंगित करने के लिए किया जाता है। –

+0

समझा, लेकिन ऐसा लगता है कि यह एक बहुत ही सरल उदाहरण है। यदि ऐसा नहीं है, तो 'स्ट्रिंग' का उपयोग करके ऐसे छोटे ब्लॉक के लिए 'स्ट्रिंगबिल्डर' से अधिक कुशल होगा। साथ ही, रनटाइम दृश्य से उत्पन्न कक्षा को देखने के लिए आपके समय के लायक हो सकता है। यह बहुत सारे बफरिंग का ख्याल रखता है कि 'स्ट्रिंगबिल्डर' आपको दृश्यों के पीछे देता है। –

-3

मुझे लगता है कि यह रेजर का मुद्दा नहीं है, बल्कि कुछ मार्जिंग के साथ तत्व प्रदान किया जाता है।

  1. ओपन फायरबग (या क्रोम या जो कुछ भी) और देखें कि यह वास्तव में मार्कअप समस्या है।
  2. आप

पाठ जोड़ने के लिए फ़ाइल कोशिश CSS में {margin: 0}

+0

दिखाया गया कोड वास्तव में ब्राउज़र में किसी भी '' तत्व प्रस्तुत नहीं करेगा; रेजर द्वारा प्रस्तुत करने के लिए पाठ के ब्लॉक को पहचानने के लिए इसका उपयोग किया जाता है। स्कॉट गु की स्पष्टीकरण देखें - http://weblogs.asp.net/scottgu/archive/2010/12/15/asp-net-mvc-3-razor-s-and-lt-text-gt-syntax.aspx –

+0

@ ग्राहम .. ओह, यह समझा जाता है .. धन्यवाद! –

0

समस्या स्रोत है कि उत्पन्न होता है के साथ है। आप वास्तविक स्रोत को देखते हैं तो आपको मिलेगा:

 
    1 
    , 
    2 
    , 
    3 

आप देख सकते हैं वहाँ जो एक अंतरिक्ष के लिए नीचे पतन ब्राउज़र वहाँ में सफेद स्थान का एक बहुत है (definition for normal को देखो)।

StringBuilder या string.Join का उपयोग करना यह ठीक करने का तरीका है यदि आप जो भी कर रहे हैं, वे इन तीनों संख्याओं को आउटपुट कर रहे हैं। लेकिन अगर आप कुछ और करने की कोशिश कर रहे हैं और यह एक सरल उदाहरण है तो see this blog postol/ul और li एस का उपयोग करके इसे करने के तरीके के लिए।

6

आप संख्या और अल्पविराम के बीच अतिरिक्त व्हाइट देख रहे हैं क्योंकि अपना रेजर टेम्पलेट संख्या और अल्पविराम के बीच एक लाइन ब्रेक (जो ब्राउज़र में खाली स्थान के रूप में प्रदर्शित करता है) शामिल हैं:

@for (int i = 1; i < 3; i++) 
{ 
    <text>@i</text> >LINE BREAK HERE< 
    if (i != 2) 
    { 
    <text>, </text> 
    } 
} 

मैं Darin's answer चाहते , और मैं अपने पाश को दूर करने और एक अधिक कथात्मक बयान इसकी जगह सुझाव है, लेकिन अगर आपको लगता है कि अब तक जाने के लिए नहीं करना चाहते, लाइन ब्रेक को हटाने में कम से कम कोशिश:

@for (int i = 1; i < 3; i++) 
{ 
    <text>@i</text>if (i != 2){<text>, </text>} 
} 
संबंधित मुद्दे