ASP.NET MVC: Apa tujuan dari @section? [Tutup]

132

Untuk aplikasi ASP.NET MVC, saya melihat artikel blog ini . Penulis ScottGu menambahkan @sectionke Index.cshtml.

Saya punya beberapa pertanyaan (merujuk pada artikel di atas):

  • Apakah Index.cshtml Tampilan bersama?
  • Kode contoh menggunakan @sectionkode dalam tampilan tertentu. Mengapa?

Dapatkah seseorang tolong jelaskan mengapa dan kapan saya akan menggunakan @sectiondalam Tampilan?

A Bogus
sumber
4
Lihatlah tutorial ini: weblogs.asp.net/scottgu/archive/2010/12/30/…
Adriano Repetti
1
Meskipun dapat berargumen bahwa alasan penutupan yang lebih baik hari ini akan "terutama berdasarkan pendapat", itu masih akan ditutup. Tidak ada cara pasti untuk menggunakan bagian.
Richard
2
Tidak ada cara pasti untuk menggunakan apa pun. Lihat saja bagaimana orang menggunakan internet ...
keji

Jawaban:

138

@sectionadalah untuk mendefinisikan konten yang diganti dari tampilan bersama. Pada dasarnya, ini adalah cara bagi Anda untuk menyesuaikan tampilan bersama Anda (mirip dengan Halaman Master dalam Formulir Web).

Anda mungkin menemukan Scott Gu menulis tentang ini sangat menarik .

Sunting: Berdasarkan pada klarifikasi pertanyaan tambahan

The @RenderSectionsintaks masuk ke Shared View, seperti:

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

Ini kemudian akan ditempatkan dalam tampilan Anda dengan @Sectionsintaks:

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

Di MVC3 + Anda dapat menentukan file Layout yang akan digunakan untuk tampilan secara langsung atau Anda dapat memiliki tampilan default untuk semua tampilan.

Pengaturan tampilan umum dapat diatur dalam _ViewStart.cshtml yang mendefinisikan tampilan tata letak default yang mirip dengan ini:

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

Anda juga dapat mengatur Tampilan Bersama untuk digunakan secara langsung dalam file, seperti index.cshtml secara langsung seperti yang ditunjukkan dalam cuplikan ini.

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

Ada berbagai cara Anda dapat menyesuaikan pengaturan ini dengan beberapa lagi yang disebutkan dalam jawaban SO ini .

Frazell Thomas
sumber
Terima kasih, Frazell! Saya menambahkan lebih banyak ke pertanyaan saya sehubungan dengan tutorial itu. Bisakah Anda jelaskan lebih lanjut? Terima kasih lagi!
A Bogus
Hai @ABogus, saya memperbarui jawabannya. Semoga informasi tambahan ini bermanfaat :)
Frazell Thomas
21

Contoh yang baik adalah Javascript. Anda ingin ini berada di bagian bawah halaman yang dirender di browser karena ini adalah praktik terbaik.

Bagaimana Anda melakukan ini dari Tampilan berdasarkan Layout / Masterpage di mana Anda hanya dapat mengakses bagian tengah halaman?

Anda melakukan ini dengan mendeklarasikan bagian Script di bagian bawah halaman Layout. Kemudian Anda dapat menambahkan konten, dalam hal ini Javascript termasuk (saya harap!), Dari halaman Tampilan Anda ke bagian bawah halaman tata letak Anda.

John Mc
sumber
4

Anda ingin menggunakan bagian ketika Anda ingin sedikit kode / konten untuk di-render di placeholder yang telah ditentukan di halaman tata letak.

Dalam contoh spesifik yang Anda tautkan, ia telah menetapkan RenderSection di _Layout.cshtml. Setiap tampilan yang menggunakan tata letak itu dapat menentukan bagian @ dengan nama yang sama seperti yang didefinisikan dalam Tata Letak, dan itu akan menggantikan panggilan RenderSection di tata letak.

Mungkin Anda bertanya-tanya bagaimana kita tahu Index.cshtml menggunakan tata letak itu? Ini karena sedikit konvensi MVC / Razor. Jika Anda melihat dialog di mana dia menambahkan tampilan, kotak "Gunakan tata letak atau halaman master" dicentang, dan tepat di bawahnya tertulis "Biarkan kosong jika diatur dalam file _viewstart Razor". Itu tidak ditampilkan, tetapi di dalam file _ViewStart.cshtml itu adalah kode seperti:

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

Cara kerja viewstarts adalah file cshtml apa pun dalam direktori atau direktori anak yang sama akan menjalankan ViewStart sebelum dijalankan sendiri.

Itulah yang memberitahu kita bahwa Index.cshtml menggunakan Shared / _Layout.cshtml.

ischell
sumber
Penjelasan bagus tentang _ViewStart.
ᴍᴀᴛᴛ ʙᴀᴋᴇʀ
3

Ini memungkinkan Anda menentukan @Sectionkode dalam templat yang kemudian dapat Anda sertakan dalam file lain. Misalnya, bilah sisi yang ditentukan dalam templat, dapat dirujuk dalam tampilan lain yang disertakan.

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

Semoga ini membantu.

chrislhardin
sumber