निम्नलिखित अनुभागों को परिभाषित किया गया है लेकिन लेआउट पृष्ठ "~ / Views / साझा / _Layout.cshtml" के लिए प्रदान नहीं किया गया है: "लिपियों"


100

मैं एएसपी एमवीसी के लिए नया हूं और एएसपी एमवीसी 4 बीटा ट्यूटोरियल http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/intro-to-aspnet पर इंट्रो का उपयोग कर रहा हूं -mvc -4

मुझे एक ऐसी त्रुटि का सामना करना पड़ रहा है, जिसका जवाब मुझे नहीं मिल रहा है और न ही मुझे बहुत अधिक प्रोग्रामिंग अनुभव है, इसलिए मुझे नहीं पता कि इसे ट्यूटोरियल के साथ आगे बढ़ने के लिए कहां से शुरू करना है। मैं किसी भी मदद की सराहना करता हूं जो आप प्रदान कर सकते हैं।

मैं कंट्रोलर सेक्शन से अपने मॉडल के डेटा को एक्सेस करने में हूँ और मुझे यह त्रुटि तब हो रही है जब मैं एक मूवी को ट्यूटोरियल के हिस्से के रूप में बनाने का प्रयास करता हूं, मैं लिंक "नया बनाएं" पर क्लिक करता हूं और मुझे निम्न त्रुटि मिलती है।

निम्नलिखित अनुभागों को परिभाषित किया गया है लेकिन लेआउट पेज> "~ / Views / साझा / _Layout.cshtml" के लिए प्रदान नहीं किया गया है: "लिपियों"

विज़ुअल स्टूडियो एक्सप्रेस का उपयोग करने के बजाय, मैंने विजुअल स्टूडियो 2012 आरसी डाउनलोड करने का विकल्प चुना (यह निश्चित नहीं है कि मेरे मुद्दे का मूल कारण क्या होगा।

मुझे लगता है कि आपको इसका जवाब देने के लिए मुझे कोड शामिल करने की आवश्यकता हो सकती है, लेकिन मुझे यकीन नहीं है कि क्या कोड को भी शामिल करना चाहिए। कृपया सलाह दें कि यदि आपको कोई कोड शामिल करना है तो मुझे क्या चाहिए और मुझे इसे अपने प्रश्न में जोड़कर खुशी होगी।

धन्यवाद,


आपको उस ट्यूटोरियल के विजुअल स्टूडियो 2012 संस्करण का अनुसरण करना चाहिए asp.net/mvc/tutorials/mvc-4/…
RickAndMSFT

1
मेरे पास एक ही मुद्दा था और मेरी समस्या तब हल हुई जब मैंने @ {} से RenderSection लिया और केवल @ का उपयोग किया। पता नहीं क्यों यह खुश हो जाता है
गुइलेरमे फरेरा

1
ऊपर रिकैन्ड टिप्पणी में लिंक मेरे लिए काम नहीं करता है। लेकिन इससे भी महत्वपूर्ण बात यह है कि यह एक ट्यूटोरियल मुद्दा नहीं है, यह एक वीएस कोड जनरेशन मुद्दा है जो आसानी से तय हो जाता है और इसे स्वीकार किए गए एक सुझाव के नीचे दिए गए कई उत्तरों के रूप में असफलता रेखा को हटाकर केवल पाप नहीं करना चाहिए। वास्तव में क्या चल रहा है, इसकी चर्चा के लिए नीचे दिए गए मेरे उत्तर ( stackoverflow.com/a/27152625/165164 ) को देखें - कम से कम VS के कुछ संस्करणों के लिए।
ऐनी गुन

बताई गई त्रुटि तब उत्पन्न होती है जब एक दृश्य ने परिभाषित किया है @sectionजो कि लेआउट (साथ RenderSection) में प्रदान नहीं किया गया है । यह तब हो सकता है जब आपने गलत संदर्भित किया हो Layout, या किसी लेआउट का संदर्भ लेना भूल गए हों। @ Vonv का जवाब
स्टुअर्टएलसी

जवाबों:


144

इसका मतलब यह है कि आपने अपने मास्टर लेआउट.शीट एमएल में एक सेक्शन को परिभाषित किया है, लेकिन आपने अपने व्यू में उस सेक्शन के लिए कुछ भी शामिल नहीं किया है।

यदि आपके _Layout.cshtml में कुछ ऐसा है:

@RenderSection("scripts")

फिर सभी लेआउट जो उस लेआउट का उपयोग करते हैं , उन्हें उसी नाम के साथ शामिल होना चाहिए@section (भले ही अनुभाग की सामग्री खाली हो)

@{
    ViewBag.Title = "Title";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
@section scripts{
    // Add something here
}

एक विकल्प के रूप में, आप झूठे के लिए आवश्यक सेट कर सकते हैं, फिर आपको प्रत्येक दृश्य में अनुभाग जोड़ने की आवश्यकता नहीं होगी,

@RenderSection("scripts", required: false)

या आप @RenderSectionकिसी ifब्लॉक में भी लपेट सकते हैं ,

@if (IsSectionDefined("scripts"))
{
    RenderSection("scripts");
}

7
आपका उत्तर सहायक था। मैंने _Layout.cshtml के भीतर किसी भी @RenderSection ("लिपियों") की पहचान नहीं की, लेकिन मैंने इस ट्यूटोरियल में अपने मूवी कंट्रोलर को बनाते समय उन विचारों पर ध्यान दिया, जो स्वचालित रूप से बनाए गए थे, जिनमें @section Scripts (@ Scripts.Render) शामिल थे। ~ / बंडलों / jqueryval ")} इसलिए मैंने उन लोगों को समय के लिए हटा दिया है और अब सब कुछ काम कर रहा है।
केविन डार्क

23
जबकि आपका जवाब अच्छा है। मुझे लगता है कि आपको यह बताना चाहिए कि , required: false)इसे बनाने से इसे @RenderSection("scripts", required: false)शामिल किया जा सकेगा या नहीं।
योनासन

3
@ KDark11 व्यू बनाते समय VS पूछता है कि क्या आप स्क्रिप्ट का संदर्भ लेना चाहते हैं। बस अन-टिक कि।
योनासन

1
मुझे लगता है कि @RenderSection("scripts", required: false)उत्पन्न _Layout.cshtml में डालना सही समाधान है। (क्यों के लिए नीचे चर्चा देखें।) जिस तरह से आप एक फ़ाइल में फ़िक्सेस जोड़ सकते हैं, सभी नहीं - बहुत अधिक ड्रायर फिक्स।
ऐनी गुन

@ Eonasdan वाह यह कमाल है! उन्होंने उस सुविधा को कब जोड़ा? कृपया मुझे v1.0 न बताएं: - /
Simon_Weaver


24

मेरे पास 3 स्तरों वाला केस था a'la _ MainLayout.cshtml <--- _ Middle.cshtml <--- Page.cshtml । हालांकि ऐसा करना:

_MainLayout.cshtml

<head>
   @RenderSection("head", false)
</head>

_Middle.cshtml

@section head {
    @RenderSection("head")
}

और Page.cshtml को परिभाषित करने में

@section head {
   ***content***
}

मुझे अभी भी त्रुटि मिलेगी

निम्नलिखित अनुभागों को परिभाषित किया गया है, लेकिन लेआउट पृष्ठ "~ / Views / साझा / _Middle.cshtml" के लिए प्रदान नहीं किया गया है: "सिर"।

यह पता चला कि, Middle.cshtml के लिए यह त्रुटि थी कि यह पैरेंट लेआउट को हल करने के लिए /Views/_ViewStart.cshtml पर निर्भर हो । स्पष्ट रूप से Middle.cshtml में इसे परिभाषित करके समस्या का समाधान किया गया था :

@{
Layout = "~/Views/_Shared/_MainLayout.cshtml";
}

यह तय नहीं कर सकते कि यह MVC 4 में डिज़ाइन या बग होगा - किसी भी तरह, समस्या हल हो गई :)


मैं एक ही मुद्दा रहा हूँ। मुद्दा यह है कि मैं RenderBody से पहले RenderSection बुला रहा हूं और बॉडी कंटेंट के अंदर मैं अनुभाग को परिभाषित कर रहा हूं। यह हो सकता है?
गुहिलमे फेरेरा

आज मैंने सीखा कि "मध्य लेआउट" कैसे करें कोड नमूने के लिए धन्यवाद। @section Foo {@RenderSection("Foo")}वर्गों पर "पास" करने के लिए! साथ ही शरीर पर से गुजरना पड़ता था @RenderBody()
स्टार

11

मुझे यकीन नहीं है कि सुझाए गए समाधान को स्वीकार नहीं किया गया था यदि सुझाए गए समाधान नहीं थे और समस्या का समाधान नहीं करता है। वास्तव में इस विषय से संबंधित दो मुद्दे हो सकते हैं।

अंक 1

मास्टर पृष्ठ (जैसे _Layout.cshtml) में एक खंड परिभाषित है और इसकी आवश्यकता है लेकिन विरासत में मिले विचारों ने इसे लागू नहीं किया। उदाहरण के लिए,

लेआउट टेम्पलेट

<body>
    @* Visible only to admin users *@
    <div id="option_box"> 
        @* this section is required due to the absence of the second parameter *@
        @RenderSection("OptionBox") 
    </div>
</body>

इनहेरिटिंग व्यू

किसी भी कोड को दिखाने की आवश्यकता नहीं है, बस विचार करें कि दृश्य पर कोई कार्यान्वयन नहीं है@section OptionBox {}

अंक # 1 के लिए त्रुटि

Section not defined: "OptionBox ".

अंक # 2

मास्टर पेज (जैसे _Layout.cshtml) में एक खंड परिभाषित है और इसकी आवश्यकता है और विरासत में मिले दृश्य ने इसे लागू किया। हालाँकि, कार्यान्वयन दृश्य में अतिरिक्त scriptखंड होते हैं जो इसके मास्टर पेज (ओं) में से किसी पर भी परिभाषित नहीं होते हैं

लेआउट टेम्पलेट

same as above

इनहेरिटिंग व्यू

<div>
  <p>Looks like the Lakers can still make it to the playoffs</p>
</div>
@section OptionBox {
<a href"">Go and reserve playoff tickets now</a>
}
@section StatsBox {
<ul>
    <li>1. San Antonio</li>
    <li>8. L. A. Lakers</li>
</ul>
}

अंक # 2 के लिए त्रुटि

The following sections have been defined but have not been rendered for the layout page "~/Views/Shared/_Layout.cshtml": "StatsBox"

ओपी का मुद्दा अंक # 2 के समान है और स्वीकृत उत्तर अंक # 1 के लिए है।


3
सहमत, ओपी की टिप्पणी है कि उन्होंने त्रुटि को हल करने के लिए एक अनुभाग को हटा दिया है, जिसका अर्थ है कि उनके पास एक दृश्य में परिभाषित अनुभाग था, लेकिन लेआउट में नहीं, अधिकांश उत्तर पते के रूप में अन्य तरीके से नहीं (समस्या # 2) जो मेल खाती है वे त्रुटि का वर्णन करते हैं) अन्य सभी उत्तर एक ऐसी स्थिति का वर्णन कर रहे हैं जो उस त्रुटि का उत्पादन नहीं करेगा, लेकिन इसके बजाय "अनुभाग परिभाषित नहीं किया गया" के बजाय "अनुभाग परिभाषित किया गया है ... लेकिन प्रदान नहीं किया गया"।
एरोनल्स

8

मुझे लगता है कि हमारा समाधान सभी के लिए पर्याप्त रूप से अलग था इसलिए मैं इसे यहाँ दस्तावेज़ करूँगा।

हमारे पास मुख्य लेआउट, एक मध्यस्थ लेआउट और फिर अंतिम क्रिया पृष्ठ रेंडर का सेटअप है। Main.cshtml <- config.cshtml <- Action.cshtml

केवल जब web.config customErrors='On/RemoteOnly'हमें एक कस्टम त्रुटि मिली थी और कोई अपवाद नहीं Application_Errorथा और न ही बुलाया गया था। मैं Layout = nullError.cshtml में लाइन पर इसे पकड़ सकता था। अपवाद के रूप में सवाल था, लिपियों खंड लापता।

हमने इसे Main.cshtml में परिभाषित किया है (आवश्यकता के साथ: गलत) और Action.cshtml में स्क्रिप्ट अनुभाग में कुछ भी नहीं लिखा था।

समाधान @section scripts { @RenderSection("scripts", false) }को config.cshtml में जोड़ना था ।


7

यह मूल रूप से तब होता है जब _Loutout.cshtml बिना होता है:

@RenderSection("scripts", required: false)

या के साथ

@RenderSection("scripts")  

के बिना

required: false

इसलिए, केवल _Layout.cshtml में @RenderSection ("स्क्रिप्ट्स", आवश्यक: गलत) जोड़ें और यह उन डेवलपर्स के लिए विशेष रूप से काम करता है जो केंडौई जेनरेटेड प्रोजेक्ट्स के साथ काम करते हैं।


7

ऐसा प्रतीत होता है कि दृश्य फ़ाइलों के बीच एक बेमेल है कि जब आप एक नया मॉडल बनाने के लिए इसका उपयोग करते हैं तो Visual Studio के कुछ संस्करण आपके लिए उत्पन्न होते हैं। मुझे नए वीएस 2013 कम्युनिटी एडिशन का उपयोग करने और http://www.33schools.com/aspnet/mvc_app.asp पर W3Schools ट्यूटोरियल के माध्यम से चलने में इस समस्या का सामना करना पड़ा , लेकिन ऊपर दी गई टिप्पणियां बताती हैं कि यह ट्यूटोरियल दिशाओं के साथ या एक समस्या नहीं है वी। एस। का एकल संस्करण

यह सच है कि आप त्रुटि संदेश को दूर करने के द्वारा ही दूर कर सकते हैं

@Scripts.Render("~/bundles/jqueryval")

विजुअल स्टूडियो द्वारा ऑटोजेनरेटेड बनाने / संपादित लेआउट से लाइन।

लेकिन वह समाधान मूल कारण को संबोधित नहीं करता है या आपको ट्यूटोरियल के माध्यम से चलने से अधिक खत्म करने के लिए एक अच्छी जगह पर छोड़ देता है। एक वास्तविक अनुप्रयोग के विकास में कुछ बिंदु पर (शायद काफी जल्दी), आप jquery सत्यापन कोड तक पहुंच चाहते हैं जो टिप्पणी करने वाला समाधान आपके ऐप से निकाल देता है।

यदि आप अपने लिए एक नया मॉडल बनाने के लिए VS का उपयोग करते हैं, तो यह पांच व्यू फाइल्स का एक सेट भी बनाता है: क्रिएट, डिलीट, डिटेल्स, एडिट और इंडेक्स। इनमें से दो दृश्य, क्रिएट और एडिट का उद्देश्य उपयोगकर्ता द्वारा डेटाबेस रिकॉर्ड में फ़ील्ड के डेटा को जोड़ना / संपादित करना है जो मॉडल को रेखांकित करता है। एक वास्तविक ऐप में उन विचारों के लिए, आप शायद db में रिकॉर्ड सहेजने से पहले jquery सत्यापन लाइब्रेरी का उपयोग करके कुछ डेटा सत्यापन करना चाहते हैं। यही कारण है कि वीएस निम्नलिखित पंक्तियों को जोड़ता है

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

उन दो विचारों के नीचे और दूसरों को नहीं। ऑटोजेनरेटेड कोड उन विचारों के लिए मान्यता पुस्तकालय उपलब्ध कराने की कोशिश कर रहा है, लेकिन अन्य नहीं।

त्रुटि इसलिए होती है क्योंकि VS या तो साझा किए गए _Layout.cshtml फ़ाइल के लिए एक संबंधित लाइन नहीं जोड़ता है या, ऊपर एक उत्तर देखें, इसे जोड़ता है लेकिन इसे टिप्पणी छोड़ देता है। यह लाइन है

@RenderSection("scripts", required: false)

यदि आपके कुछ विचारों में एक स्क्रिप्ट अनुभाग है (जैसा कि क्रिएट और एडिट डू), तो लेआउट में एम्बेडेड रेंडरस्नेन कमांड होना चाहिए। यदि कुछ स्क्रिप्ट में सेक्शन है और कुछ नहीं (जैसे कि Delete, Details और Index नहीं), तो RenderSection कमांड के पास required: falseपैरामीटर होना चाहिए।

तो सबसे अच्छा समाधान, यदि आप ट्यूटोरियल के माध्यम से चलने के अलावा और कुछ भी करना चाहते हैं, तो यह है कि स्टेटमेंट को _Layout.cshtml में एड को एडिट और व्यूज से कोड न हटाएं।

PS यह एक भ्रम की स्थिति है, यहाँ, यह है कि जो आवश्यक है वह एक 'बंडल' में है और आवश्यकता विवरण ऐसा लगता है कि यह एक बंडल फ़ोल्डर में एक फ़ाइल शामिल करने का प्रयास कर रहा है जो आपके प्रोजेक्ट में मौजूद नहीं है। लेकिन, डिबग बिल्ड और ट्यूटोरियल्स के लिए, यह प्रासंगिक नहीं है क्योंकि बंडल किए गए फ़ाइलों को एक बार में शामिल किया जाता है। देखें: http://www.asp.net/mvc/overview/performance/bundling-and-minification कोड जो यहां जारी है वह पृष्ठ के दो-तिहाई रास्ते के बारे में संक्षेप में बताया गया है।


यह "चट्टानें" और वास्तव में अच्छी व्याख्या है। शायद यह बाद में आया इसलिए कई वोट नहीं मिले ....
जोसेफोग्गी

2

ASP.NET MVC 4 ट्यूटोरियल विज़ुअल स्टूडियो 2012 के माध्यम से काम करते समय मुझे "एक नियंत्रक से अपने मॉडल के डेटा तक पहुँचने" में समान त्रुटि का सामना करना पड़ा। फिक्स काफी सरल है।

साझा फ़ोल्डर में _Layout.cshtml दस्तावेज़ के भीतर Visual Studio 2012 में एक नया ASP.NET MVC 4 वेब अनुप्रयोग बनाते समय "स्क्रिप्ट" अनुभाग पर टिप्पणी की जाती है।

    @*@RenderSection("scripts", required: false)*@

बस लाइन और नमूना कोड को अन-कमेंट करना चाहिए।

    @RenderSection("scripts", required: false)

1

MVC के शुरुआती के लिए एक ट्यूटोरियल को लागू करते समय मेरे पास एक ही मुद्दा है। मुझे आपके लेआउट .shtml फ़ाइल में @RenderSection को संशोधित करने के लिए विभिन्न सुझाव मिले, लेकिन मैंने इसका उपयोग नहीं किया।

मैंने बहुत खोज की है और फिर मैंने पाया कि स्क्रिप्ट टैग जनरेट किया गया है (देखें / Edit.cshtml) और अन्य cshtml फ़ाइल रेंडर नहीं कर रही है

**@section Scripts {
@Scripts.Render("~/bundles/jqueryval")

} **

इसलिए मैंने उन लाइनों को हटा दिया और एप्लिकेशन सुचारू रूप से चलने लगे।


1

मैंने यह भी सुचारू रूप से चल रहा है की तुलना में ** @ अनुभाग लिपियों टिप्पणी की है। :)


धन्यवाद। इससे मदद मिली :)
noobprogrammer

0

मैंने वेब में त्रुटि की खोज की और इस पृष्ठ पर आया। मैं विजुअल स्टूडियो 2015 का उपयोग कर रहा हूं और यह मेरी पहली एमवीसी परियोजना है।

यदि आप रेंडर अनुभाग से पहले @ प्रतीक याद करते हैं तो आपको वही त्रुटि मिलेगी। मैं इसे भविष्य के शुरुआती लोगों के लिए साझा करना चाहूंगा।

 @RenderSection("headscripts", required: false)

0

मुझे लग रहा है कि आप अपने अनुभाग को _Layout फ़ाइल में एक @section के भीतर से दे रहे हैं जो एक @ दृश्य के साथ एक आंशिक दृश्य का संदर्भ दे रहा है, यानी आपने @section के भीतर @section का नामकरण किया है। _Layout फ़ाइल में, रेंडरिंग के चारों ओर @ स्नेह निकालें।



0

मेरे लिए समस्या मेरे _Loutout.cshtml में थी, मेरे पास एक शर्त के अंदर रेंडरसेन है

 @if (theme == "Red" || theme == "Green")
  {
       <div>
       @RenderSection("Footer", false)
       </div>
   }

और मेरे बच्चे के दृष्टिकोण में यह बिना किसी शर्त के था

@section Footer{
        <div>
            @Html.AwButton("Reject", "Reject")
            @Html.AwSubmit("Ok", "Ok")
        </div>
    }

इस विषय के बावजूद, बच्चा पाद लेख जोड़ रहा था। लेकिन अभिभावकों में जब थीम रेड या ग्रीन नहीं होती है, तो यह फूटर और अनहैंडेड अपवाद को नहीं जोड़ा जा रहा है।


-1

वर्तनी और शब्द के ऊपरी / निचले मामले की जांच करें ""

जब हम कभी भी @RenderSection ("नाम", आवश्यक: गलत) लिखते हैं, तो सुनिश्चित करें कि रेजर दृश्य में एक खंड @section नाम {} होता है, इसलिए वर्तनी और ऊपरी / निचले मामले की जांच करें "" इस मामले में सही है "लिपियों"


-1

कृपया सुनिश्चित करें कि आपने स्क्रिप्ट अनुभाग का उपयोग करने की सही वर्तनी टाइप की है

सही है

@section scripts{ //your script here}

अगर आपने टाइप @section script{ //your script here}किया है तो यह गलत है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.