रेजर अछूता नहीं है html टैग


99

RazorViewEngine के साथ, मैं यह कर सकता हूं:

if (somecondition) {
     <div> some stuff </div>
}

लेकिन मैं ऐसा नहीं कर सकता (रेजर भ्रमित हो जाता है):

if (somecondition) {
    <div>
}

if (someothercondition) {
    </div>
}

मेरे पास एक ऐसी स्थिति है जिसमें मुझे अपने उद्घाटन और समापन html टैग को विभिन्न कोड ब्लॉक में रखने की आवश्यकता है - मैं रेजर में यह कैसे कर सकता हूं?

जवाबों:


161

इस तरह की कोशिश करें:

if (somecondition) {
    @:<div>
}


17
<text><div></text>काम करता है, लेकिन <text></div></text>नहीं करता है।
friggle

@Stuntman आपको इसे काम करने के लिए उद्घाटन और समापन टैग दोनों के लिए करने की आवश्यकता है।
डिपार्टमेन्ट बी

और बहु-पाठ से कैसे निपटें?
दिमित्री त्सोई

मैं यह इनलाइन नहीं कर सका। अगर (हालत) {@: tag}। मुझे इसे ऊपर की तरह प्रारूपित करना था।
माइक

59

डारिन के उत्तर की व्याख्या करने के लिए, यानी HTML को इस तरह से उपसर्ग करना:

@:<html>

@: रेजर में 'सादे पाठ के रूप में कुछ प्रस्तुत करना' का अर्थ है

या आप इसका उपयोग कर सकते हैं, जो HTML को आउटपुट करता है जैसा कि आपने मौखिक रूप से लिखा था (इसका उपयोग स्वचालित HTML एन्कोडिंग से बचने के लिए किया जा सकता है जो रेजर करता है यदि आप HTML को आउटपुट करने की कोशिश कर रहे हैं):

@Html.Raw("<html>")

(एमएस से Html.Raw संदर्भ - http://msdn.microsoft.com/en-us/library/gg568896(v=vs.111).aspx )


2
समाधान महान हैं, लेकिन स्पष्टीकरण अमूल्य हैं। धन्यवाद!
जय

2
मैं @ Html.Raw ("<html>") समाधान पसंद करता हूं, क्योंकि ऑटो फॉर्मेटिंग (ctrl + K ctrl + D) का उपयोग करते समय पहले वाला मल्टीलाइन पर विभाजित हो गया था
Matteo Sganzetta

@MatteoSganzetta सच है जब तक कि आप क्या उत्पादन कर रहे हैं रेजर चर में छिड़का गया है, उदाहरण के लिए:@:<a href="@link" class="@classNames">@text</a>
qJake

उपयोग करने में लापरवाही बरतें @Html.Raw()- संबंधित SO पोस्ट देखें
SliverNinja - MSFT

4

आप एक कस्टम MVC हेल्पर विधि बना सकते हैं। आपके साथ नाम स्थान पर एक सार्वजनिक स्थैतिक वर्ग MyRenderHelpers बनाएँ System.Web.Mvc.Htmlऔर एक विधि Html लिखें।

namespace System.Web.Mvc.Html
{
    public static class MyRenderHelpers
    {
        public static MvcHtmlString Html(this HtmlHelper helper, string html, bool condition)
        {
            if (condition)
                return MvcHtmlString.Create(html);
            else
                return MvcHtmlString.Empty;
        }
    }
}

अब आप इस विस्तार विधि का उपयोग अपने रेजर दृश्य में कर सकते हैं:

@Html.Html("<div>", somecondition)

3

तथ्य यह है कि आप ऐसा करने के लिए आमतौर पर इंगित करता है कि आपके दृश्य कोड सही ढंग से फैक्टर नहीं है। HTML की प्रकृति संतुलित या स्व-संलग्न टैग है (कम से कम HTML 4 में, HTML 5 इससे दूर लगता है) और रेजर उस धारणा पर निर्भर करता है। यदि आपकी सशर्त रूप से अनुपस्थिति है <div>तो आप कहीं बाद में आउटपुट भी करेंगे </div>। बस अपने ifबयान में जोड़ी जोड़ी रखो :

@if(something) {
    <div>
        Other stuff
    </div>
}

अन्यथा आप यहां जैसे अजीब कोड के साथ समाप्त होते हैं


6
मेरी स्थिति यह है कि मैं चाहता हूँ
sydneyos

ठीक है, मेरा कहना है कि 99% मामलों में आपको शायद नहीं करना चाहिए। लेकिन आपको लगता है कि 1% में फिट हो सकता है जिस स्थिति में है वहाँ @:या<text></text>
marcind

7
वह शायद बाद में एक समापन ब्लॉक है:if (somecondition) { @:</div> }
शमौन_वेर

हाँ, उसे करना होगा। मेरा कहना है कि इस तरह के विचारों को फिर से परिभाषित किया जा सकता है ताकि इस तरह की दोहरी स्थिति जरूरी न हो।
marcind

1
@michielvoo उदाहरण के लिए एक सशर्त div आवरण के लिए इस पद्धति का उपयोग करना क्यों बुरा है? HTML5 में भी आप <link>टैग बंद नहीं करते हैं ।
क्रिस हैन्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.