ASP.NET MVC: @ bölümünün amacı nedir? [kapalı]


132

Bir ASP.NET MVC uygulaması için bu blog yazısını gördüm . Yazar ScottGu, Index.cshtml'ye ekler @section.

Birkaç sorum var (yukarıdaki makaleye atıfta bulunarak):

  • Index.cshtml paylaşılan bir Görünüm mü?
  • Örnek kod, @sectionbelirli bir görünümde kodu kullanır . Neden?

Biri @sectionbir Görünümde neden ve ne zaman kullanacağımı açıklayabilir mi?



1
Bugün daha iyi bir kapatma nedeninin "öncelikle fikir temelli" olacağı iddia edilebilirken, yine de kapalı olacaktır. Bölümleri kullanmanın kesin bir yolu yoktur.
Richard

2
Herhangi bir şeyi kullanmanın kesin bir yolu yoktur. İnsanların interneti nasıl kullandığına bir bakın ...
keji

Yanıtlar:


138

@sectionbir içeriği tanımlamak içindir, paylaşılan bir görünümden geçersiz kılınır. Temel olarak, paylaşılan görünümünüzü ayarlamanızın bir yoludur (Web Formlarındaki Ana Sayfaya benzer).

Sen bulabilir bu çok ilginç Scott Gu'nun yazma kadar .

Düzenleme: Ek soru açıklamasına göre

@RenderSectionSözdizimi gibi Paylaşılan View, gider:

<div id="sidebar">
    @RenderSection("Sidebar", required: false)
</div>

Bu, daha sonra @Sectionsözdizimi ile görünümünüze yerleştirilir :

@section Sidebar{
    <!-- Content Here -->
}

MVC3 + 'da, görünüm için kullanılacak Düzen dosyasını doğrudan tanımlayabilir veya tüm görünümler için varsayılan bir görünüme sahip olabilirsiniz.

Genel görünüm ayarları, aşağıdakine benzer varsayılan düzen görünümünü tanımlayan _ViewStart.cshtml'de ayarlanabilir:

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

Ayrıca, Paylaşılan Görünümü doğrudan bu kod parçacığında gösterildiği gibi index.cshtml gibi doğrudan dosyanın içinde kullanılacak şekilde ayarlayabilirsiniz.

@{
    ViewBag.Title = "Corporate Homepage";
    ViewBag.BodyID = "page-home";
    Layout = "~/Views/Shared/_Layout2.cshtml";
}

Bu SO cevabında birkaç tane daha bahsedilerek bu ayarı değiştirmenin çeşitli yolları vardır .


Teşekkürler Frazell! Bu eğiticiye referans olarak soruma daha fazlasını ekledim. Daha fazla açıklayabilir misin? Tekrar teşekkürler!
Sahte

Hey @ABogus Cevabı güncelledim. Umarım bu ek bilgi yardımcı olur :)
Frazell Thomas

21

İyi bir örnek Javascript'tir. En iyi uygulama olduğu için bunun tarayıcıda oluşturulan sayfanın altında olmasını istiyorsunuz.

Bunu, yalnızca sayfanın ortasına erişebileceğiniz bir Düzen / Ana Sayfaya dayalı bir Görünümden nasıl yaparsınız?

Bunu, Mizanpaj sayfasının altında bir Komut Dosyaları bölümü bildirerek yaparsınız. Ardından, Görünüm sayfanızdan düzen sayfanızın altına Javascript içerir (umarım!) Gibi içerik ekleyebilirsiniz.


4

Bir mizanpaj sayfasında tanımlanmış bir yer tutucuda bir miktar kod / içerik istediğinizde bölümleri kullanmak istersiniz.

Bağladığınız belirli örnekte, _Layout.cshtml'de RenderSection'ı tanımlamıştır. Bu düzeni kullanan herhangi bir görünüm, Düzen'de tanımlandığı gibi aynı ada sahip bir @ bölümünü tanımlayabilir ve bu, düzende RenderSection çağrısının yerini alır.

Belki de Index.cshtml'nin bu düzeni kullandığını nasıl bildiğimizi merak ediyorsunuzdur? Bu, biraz MVC / Razor kuralından kaynaklanmaktadır. Görünümü eklediği iletişim kutusuna bakarsanız, "Düzeni veya ana sayfayı kullan" kutusu işaretlenir ve hemen altında "Razor _viewstart dosyasında ayarlanmışsa boş bırakın" yazar. Gösterilmez, ancak bu _ViewStart.cshtml dosyasının içinde aşağıdaki gibi bir kod bulunur:

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

Viewstarts'ın çalışma şekli, aynı dizin veya alt dizinler içindeki herhangi bir cshtml dosyasının, kendisini çalıştırmadan önce ViewStart'ı çalıştırmasıdır.

Index.cshtml'nin Shared / _Layout.cshtml'yi kullandığını bize söyleyen budur.


_ViewStart'ın güzel açıklaması.
ᴍᴀᴛᴛ ʙᴀᴋᴇʀ

3

@SectionŞablonunuzda, daha sonra diğer dosyalara ekleyebileceğiniz bir kod tanımlamanıza olanak tanır . Örneğin, şablonda tanımlanan bir kenar çubuğuna başka bir dahil edilen görünümde başvurulabilir.

//This could be used to render a @Section defined as @Section SideBar { ...
@RenderSection("SideBar", required: false);

Bu yardımcı olur umarım.

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.