Aşağıdaki bölümler tanımlanmış ancak "~ / Views / Shared / _Layout.cshtml" düzen sayfası için oluşturulmamıştır: "Komut Dosyaları"


101

ASP MVC'de yeniyim ve ASP MVC 4 Beta'ya Giriş öğreticisini kullanıyorum http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/intro-to-aspnet -mvc-4

Bir cevap bulamadığım ve çok fazla programlama deneyimim olmayan bir hatayla karşılaşıyorum, bu yüzden bunu öğretici ile devam ettirmek için nereden başlayacağımı bile bilmiyorum. Sağlayabileceğiniz her türlü yardım için minnettarım.

Modelinizin Verilerine Bir Denetleyiciden Erişme bölümündeyim ve eğiticinin bir parçası olarak bir Film oluşturmaya çalıştığımda bu hatayı alıyorum, "Yeni Oluştur" bağlantısını tıklıyorum ve aşağıdaki hatayı alıyorum

Aşağıdaki bölümler tanımlanmış, ancak düzen sayfası> "~ / Views / Shared / _Layout.cshtml": "Scripts" için oluşturulmamıştır

Visual Studio express'i kullanmak yerine, Visual Studio 2012 RC'yi indirmeyi seçtim (sorunumun temel nedeninin bu olup olmadığından emin değilim.

Bunu yanıtlamak için benden kod eklememi isteyebileceğinizi biliyorum, ancak hangi kodu dahil edeceğimi bile bilmiyorum. Lütfen varsa hangi kodu eklemem gerektiğini belirtin ve soruma eklemekten memnuniyet duyarım.

Teşekkür ederim,


Bu öğreticinin Visual Studio 2012 sürümünü takip etmelisiniz asp.net/mvc/tutorials/mvc-4/…
RickAndMSFT

1
Aynı sorunu yaşadım ve sorunum, RenderSection'ı @ {} alanından çıkarıp yalnızca @ kullandığımda çözüldü. Bunun neden olduğu hakkında hiçbir fikrim yok
Guilherme Ferreira

1
RickAnd'daki bağlantı yukarıdaki yorum benim için çalışmıyor. Ancak daha da önemlisi, bu öğretici bir sorun değil, bu kolayca düzeltilebilen bir VS kod oluşturma sorunu ve kabul edilenin altındaki birçok yanıtın önerdiği gibi başarısız satırı kaldırarak sadece kağıda dökülmemesi gerekiyor. Gerçekte neler olup bittiğine dair bir tartışma için aşağıdaki cevabıma ( stackoverflow.com/a/27152625/165164 ) bakın - en azından VS'nin bazı sürümleri için.
Anne Gunn

Belirtilen hata, bir görünüm @sectionLayout'ta (with RenderSection) render edilmeyen bir a tanımladığında üretilir . Bu, yanlışa referans verdiyseniz Layoutveya bir düzene başvurmayı unuttuysanız meydana gelebilir . @ Vonv'un cevabına
StuartLC

Yanıtlar:


147

Bu, ana Layout.cshtml dosyanızda bir bölüm tanımladığınız, ancak Görünümünüze bu bölüm için hiçbir şey eklemediğiniz anlamına gelir.

_Layout.cshtml dosyanızda şuna benzer bir şey varsa:

@RenderSection("scripts")

Daha sonra, bu Düzeni kullanan tüm Görünümler aynı ada sahip bir görünüm içermelidir@section (bölümün içeriği boş olsa bile):

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

Alternatif olarak, gerekli'yi false olarak ayarlayabilirsiniz, bu durumda bölümü her Görünümde eklemeniz gerekmez,

@RenderSection("scripts", required: false)

veya @RenderSectionbir ifbloğa da sarabilirsiniz ,

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

7
Cevabınız yardımcı oldu. _Layout.cshtml içinde herhangi bir @RenderSection ("Komut Dosyaları") tanımlamadım, ancak bu eğitici için Filmler denetleyicimi oluştururken otomatik olarak oluşturulan görünümlerde @section Scripts {@ Scripts.Render (" ~ / bundles / jqueryval ")} Bu yüzden şimdilik bunları sildim ve şimdilik her şey çalışıyor.
Kevin Dark

23
cevabın güzel iken Sana ekleyerek işaret gerektiğini düşünüyorum , required: false)hale getirirken @RenderSection("scripts", required: false)o ya da girmesin edilecek sağlayacaktır.
Eonasdan

3
@ KDark11 Bir görünüm oluştururken VS komut dizilerine başvurmak isteyip istemediğinizi sorar. Sadece işaretini kaldırın.
Eonasdan

1
@RenderSection("scripts", required: false)Oluşturulan _Layout.cshtml dosyasına koymanın doğru çözüm olduğuna katılıyorum. (Nedenini öğrenmek için aşağıdaki tartışmaya bakın.) Bu şekilde düzeltmeyi tek bir dosyaya ekleyebilirsiniz - çok daha DRYer düzeltmesi.
Anne Gunn

@Eonasdan vay bu harika! bu özelliği ne zaman eklediler? lütfen bana v1.0'ı söyleme: - /
Simon_Weaver

26

Ayrıca, aşağıdaki satırı _Layout.cshtmlveya satırına ekleyebilirsiniz _Layout.Mobile.cshtml:

@RenderSection("scripts", required: false)

25

3 seviyeli bir vakam vardı a'la _ MainLayout.cshtml <--- _ Middle.cshtml <--- Page.cshtml . Böyle yapsa bile:

_MainLayout.cshtml

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

_Middle.cshtml

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

ve Page.cshtml tanımlamasında

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

Yine de hata alırdım

Aşağıdaki bölümler tanımlanmış ancak “~ / Views / Shared / _Middle.cshtml” düzen sayfası için oluşturulmamıştır: "head".

Ortaya çıkan hata, Middle.cshtml’nin üst düzenini çözmek için /Views/_ViewStart.cshtml’ye güvenmesiydi . Sorun, bunu Middle.cshtml'de açıkça tanımlayarak çözüldü :

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

Bunun MVC 4'teki bir hata mı yoksa tasarım gereği mi olacağına karar veremiyorum - her neyse, sorun çözüldü :)


Ben de aynı sorunu yaşıyorum. Mesele şu ki, RenderBody'den önce RenderSection'ı çağırıyorum ve Body Content'in içinde bölümü tanımlıyorum. Olabilir mi?
Guilherme Ferreira

1
Bugün buradaki kod örneği sayesinde "orta yerleşim" yapmayı öğrendim. @section Foo {@RenderSection("Foo")}bölümleri "geçmek" için! Ayrıca vücuda geçmek zorunda kaldı @RenderBody().
starlocke

çok zeki :)))
ehsan

11

Önerilen çözüm sorunu çözmediyse ve çözmüyorsa kabul edilen cevabın neden kabul edildiğinden emin değilim. Aslında bu konuyla ilgili iki ilgili konu olabilir.

Sorun 1

Ana sayfanın (örneğin _Layout.cshtml) tanımlanmış bir bölümü vardır ve bu gereklidir, ancak devralan görünümler onu uygulamadı. Örneğin,

Düzen Şablonu

<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>

Devralma Görünümü

Gerek sadece orada olduğunu düşünüyoruz, herhangi bir kod göstermek için hiçbir uygulanması@section OptionBox {} görünümünde.

1. Sorun için Hata

Section not defined: "OptionBox ".

Sorun 2

Ana sayfanın (örneğin _Layout.cshtml) tanımlanmış bir bölümü vardır ve gereklidir VE devralan görünüm bunu uygulamıştır. Ancak, uygulama görünümünün ana sayfalarında (herhangi birinde) tanımlanmamış ek scriptbölümleri vardır .

Düzen Şablonu

same as above

Devralma Görünümü

<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>
}

Sorun 2 için Hata

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

OP'nin sorunu Sayı 2'ye benzer ve kabul edilen yanıt Sayı 1 içindir.


3
Kabul edildi, OP'nin yorumu, hatayı çözmek için görünümde bir bölümü sildi; bu, bir görünümde tanımlanmış bir bölüme sahip olduğu, ancak düzende olmadığı anlamına gelir, yanıtların çoğu adresinde olduğu gibi (Sorun # 2'ye karşılık gelir) Diğer tüm cevaplar bu hatayı üretmeyecek bir durumu açıklıyor, bunun yerine "bölümler tanımlandı ama ... işlenmedi" yerine "Bölüm tanımlanmadı".
AaronLS

9

Bence çözümümüz diğer herkesten yeterince farklıydı, bu yüzden burada belgeleyeceğim.

Ana düzen, bir ara düzen ve ardından son işlem sayfası oluşturma kurulumumuz var. Main.cshtml <- Config.cshtml <- Action.cshtml

Yalnızca web.config dosyası olduğunda customErrors='On/RemoteOnly'özel bir hata aldık ve herhangi bir istisna ya Application_Errorda çağrılmadı. Bunu yakalayabilirimLayout = null Error.cshtml dosyasında bulabilirim. İstisna, sorudaki gibi, eksik komut dosyaları bölümüydü.

Main.cshtml'de (gerekli: false) tanımladık ve Action.cshtml'de betikler bölümüne yazılan hiçbir şey yoktu.

Çözüm @section scripts { @RenderSection("scripts", false) }Config.cshtml'ye eklenmekti.


7

Temelde _Layout.cshtml'de şunlar olmadığında oluşur :

@RenderSection("scripts", required: false)

veya ile

@RenderSection("scripts")  

OLMADAN

required: false

Bu nedenle, _Layout.cshtml içine @RenderSection ("betikler", gerekli: false) ekleyin ve bu, özellikle Kendoui tarafından oluşturulan projelerle çalışan geliştiriciler için çalışır .


7

Yeni bir Model oluşturmak için kullandığınızda, Visual Studio'nun bazı sürümlerinin sizin için otomatik olarak oluşturduğu Görünüm dosyaları arasında bir uyumsuzluk olduğu görülüyor. Bu sorunla yeni VS 2013 Community Edition'ı kullanarak ve http://www.w3schools.com/aspnet/mvc_app.asp adresindeki W3Schools öğreticisinde gezinirken karşılaştım. ancak yukarıdaki yorumlar bunun eğitim yönergeleri veya bir VS'nin tek versiyonu.

Hata mesajı yapabilirsiniz doğrudur gitmesini sadece kaldırarak

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

Visual Studio tarafından otomatik olarak oluşturulan oluşturma / düzenleme düzenlerindeki satır.

Ancak bu çözüm, temel nedeni ele almıyor veya sizi öğreticide yürümeyi bitirmekten daha fazlasını yapmak için iyi bir yerde bırakmıyor. Gerçek bir uygulamanın geliştirilmesinin bir noktasında (muhtemelen oldukça erken), yorumlama çözümünün uygulamanızdan kaldırdığı jquery doğrulama koduna erişmek isteyeceksiniz.

VS'yi sizin için yeni bir model oluşturmak için kullanırsanız, aynı zamanda beş Görünüm dosyası kümesi oluşturur: Oluştur, Sil, Ayrıntılar, Düzenle ve Dizin. Bu görünümlerden ikisi olan Oluştur ve Düzenle, kullanıcının modelin temelini oluşturan veritabanı kayıtlarındaki alanlar için veri eklemesine / düzenlemesine izin vermeyi amaçlar. Gerçek bir uygulamadaki bu görünümler için, kaydı db'ye kaydetmeden önce muhtemelen jquery doğrulama kitaplığını kullanarak bir miktar veri doğrulaması yapmak isteyeceksiniz. VS'nin aşağıdaki satırları eklemesinin nedeni budur

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

bu iki görüşün dibine, diğerlerine değil. Otomatik oluşturulan kod, doğrulama kitaplığını bu görünümler için kullanılabilir hale getirmeye çalışıyor, ancak diğerleri için değil.

Hata, VS'nin paylaşılan _Layout.cshtml dosyasına karşılık gelen bir satır eklememesi veya yukarıdaki bir yanıta bakın, onu eklemesi ancak yorumsuz bırakması nedeniyle oluşur. Bu çizgi

@RenderSection("scripts", required: false)

Görünümlerinizden bazılarında bir komut dosyaları bölümü varsa (Oluştur ve Düzenle gibi), düzende gömülü bir RenderSection komutu bulunmalıdır. Bazı komut dosyalarında bölüm varsa ve bazılarında yoksa (Sil, Ayrıntılar ve Dizin'de bulunmuyorsa), RenderSection komutununrequired: false parametreye .

Bu nedenle, öğreticide yürümeyi bitirmekten daha fazlasını yapmak istiyorsanız en iyi çözüm, ifadeyi _Layout.cshtml'ye eklemektir, kodu Düzenle ve Oluştur görünümlerinden kaldırmayın.

PS Bu biraz kafa karıştırıcıdır, burada, gerekli olanın bir 'paket' içinde olması ve gereksinim ifadesinin, projenizde bulunmayan bir paketler klasörüne bir dosya eklemeye çalışıyor gibi görünmesi. Ancak, hata ayıklama derlemeleri ve öğreticiler için, paketlenmiş dosyalar her seferinde bir tane içerildiğinden bu önemli değildir. Bakınız: http://www.asp.net/mvc/overview/performance/bundling-and-minification Burada söz konusu olan kod, sayfanın üçte ikisinde kısaca belirtilmiştir.


Bu "harika" ve gerçekten iyi bir açıklama. Belki daha sonra geldi, bu yüzden çok oy almadı ....
JosephDoggie

2

Visual Studio 2012 ile ASP.NET MVC 4 Öğreticisi üzerinde çalışırken "Modelinizin Verilerine Denetleyiciden Erişme bölümünde" aynı hatayla karşılaştım. Düzeltme oldukça basit.

Paylaşılan klasördeki _Layout.cshtml belgesi içinde Visual Studio 2012'de yeni bir ASP.NET MVC 4 Web Uygulaması oluştururken, "komut dosyaları" bölümü yorumlanır.

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

Basitçe satırın açıklamasını kaldırın ve örnek kod çalışmalıdır.

    @RenderSection("scripts", required: false)

1

MVC'ye yeni başlayanlar için bir öğretici uygularken aynı sorunu yaşıyorum. Layout.cshtml dosyanızdaki @RenderSection'ı değiştirmek için çeşitli önerilerim var ama kullanmadım.

Çok fazla arama yaptım ve sonra bir (View / Edit.cshtml) ve diğer cshtml dosyasında oluşturulan komut dosyası etiketinin oluşturulmadığını buldum

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

} **

Bu yüzden bu satırları kaldırdım ve uygulama sorunsuz çalışmaya başladı.


1

Bölümünüzü, bir @ bölümü ile kısmi bir görünüme atıfta bulunan _Layout dosyasındaki bir @ bölümünün içinden işlediğinizi hissediyorum, yani bir @ bölümünün içine bir @ bölümü yerleştirdiniz. _Layout dosyasında, oluşturma bölümünün etrafındaki @ bölümünü kaldırın.


1

Ayrıca ** @ section Scripts düzgün çalıştığından daha fazla yorum yaptım. :)


Teşekkürler.
Yardımcı

0

Hatayı web'de aradım ve bu sayfaya geldim. Visual Studio 2015 kullanıyorum ve bu benim ilk MVC projem.

Oluşturma bölümünden önce @ sembolünü kaçırırsanız, aynı hatayı alırsınız. Bunu gelecekteki yeni başlayanlar için paylaşmak istiyorum.

 @RenderSection("headscripts", required: false)

0

Bu sorunu aşağıdakileri kullanarak çözdüm,

@await Html.PartialAsync("_ValidationScriptsPartial")

0

Benim için sorun _Layout.cshtml dosyamdaydı, bir koşul içinde RenderSection var

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

ve çocuğuma göre şartsızdı

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

bu yüzden temadan bağımsız olarak, çocuk Altbilgiyi ekliyordu. Ancak ana öğede tema Kırmızı veya Yeşil olmadığında Altbilgi eklemiyordu ve işlenmeyen istisna atılıyordu.


-1

"" teriminin yazımını ve Büyük / Küçük harfini kontrol edin

@RenderSection ("name", gerekli: false) yazdığımızda, jilet görünümünün bir bölüm @ bölüm adı içerdiğinden {} emin olun, bu nedenle yazımını ve "" teriminin Büyük / Küçük harfini kontrol edin Bu durumda "Komut Dosyaları" doğrudur


-1

Lütfen görünümde komut dosyası bölümünü kullanmanın doğru yazımını yazdığınızdan emin olun

doğru

@section scripts{ //your script here}

yazdıysanız @section script{ //your script here}bu yanlıştır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.