Kapan Anda akan menggunakan atribut ChildActionOnly
? Apa itu ChildAction
dan dalam keadaan apa Anda ingin membatasi tindakan menggunakan atribut ini?
sumber
Kapan Anda akan menggunakan atribut ChildActionOnly
? Apa itu ChildAction
dan dalam keadaan apa Anda ingin membatasi tindakan menggunakan atribut ini?
The ChildActionOnly
atribut memastikan bahwa metode tindakan bisa disebut hanya sebagai metode anak dari dalam pandangan. Metode tindakan tidak perlu memiliki atribut ini untuk digunakan sebagai tindakan anak, tetapi kami cenderung menggunakan atribut ini untuk mencegah metode tindakan tidak dipanggil sebagai hasil dari permintaan pengguna. Setelah menetapkan metode tindakan, kita perlu membuat apa yang akan diberikan ketika tindakan dipanggil. Tindakan anak biasanya dikaitkan dengan pandangan sebagian, meskipun ini tidak wajib.
[ChildActionOnly] memungkinkan akses terbatas melalui kode di View
Nyatakan implementasi Informasi untuk URL halaman tertentu. Contoh: URL Halaman Pembayaran (hanya membayar sekali) sintaks silet memungkinkan untuk memanggil tindakan tertentu bersyarat
// example from Music Store // GET: /ShoppingCart/CartSummary [ChildActionOnly] public ActionResult CartSummary() { // your stuff } /ShoppingCart/CartSummary will return "The action 'CartSummary' is accessible only by a child request."
Jadi Anda mencegah GET ke controller tertentu secara langsung, tetapi hanya dari dalam controller / action lain. Kemungkinan: _Penampilan bela diri.InvalidOperationException
ketika Metode ditandai<ChildActionOnly>
dipanggil melalui browser?Dengan atribut [ChildActionOnly] dijelaskan, metode tindakan dapat dipanggil hanya sebagai metode anak dari dalam tampilan. Ini adalah contoh untuk [ChildActionOnly]. .
ada dua metode tindakan: Indeks () dan MyDateTime () dan Tampilan yang sesuai: Index.cshtml dan MyDateTime.cshtml. ini adalah HomeController.cs
Berikut ini adalah tampilan untuk Index.cshtml .
Berikut ini adalah tampilan parsial MyDateTime.cshtml .
Ini berarti Anda tidak dapat secara langsung memanggil tampilan parsial. tetapi bisa dipanggil melalui tampilan Index () seperti pada Index.cshtml
sumber
NonAction
juga, apa bedanya?Anda akan menggunakannya jika Anda menggunakan
RenderAction
dalam salah satu tampilan Anda, biasanya untuk membuat tampilan parsial.Alasan untuk menandainya
[ChildActionOnly]
adalah karena Anda memerlukan metode pengontrol untuk dipublikasikan sehingga Anda dapat memanggilnyaRenderAction
tetapi Anda tidak ingin seseorang dapat menavigasi ke URL (mis. / Kontroler / SomeChildAction) dan lihat hasilnya tindakan langsung.sumber
RenderAction
jugaNonActionAttribute
dalam proyek nyata?private
atauprotected
. Saya benar-benar tidak dapat memikirkan alasan bagus mengapa Anda ingin membuat metode pengontrolpublic
kecuali jika Anda ingin dapat memanggilnya secara langsung atau melaluiRenderAction
FYI, [ChildActionOnly] tidak tersedia di ASP.NET MVC Core. lihat beberapa info di sini
sumber
Sedikit terlambat ke pesta, tapi ...
Jawaban lain melakukan pekerjaan dengan baik untuk menjelaskan apa efek
[ChildActionOnly]
atribut tersebut. Namun, dalam sebagian besar contoh, saya terus bertanya pada diri sendiri mengapa saya akan membuat metode tindakan baru hanya untuk membuat tampilan parsial, dalam tampilan lain, ketika Anda bisa membuat@Html.Partial("_MyParialView")
langsung dalam tampilan. Sepertinya lapisan yang tidak perlu. Namun, ketika saya menyelidiki, saya menemukan bahwa satu manfaat adalah bahwa tindakan anak dapat membuat model yang berbeda dan meneruskannya ke pandangan sebagian. Model yang diperlukan untuk parsial mungkin tidak tersedia dalam model tampilan tempat tampilan parsial dibuat. Alih-alih memodifikasi struktur model untuk mendapatkan objek / properti yang diperlukan di sana hanya untuk membuat tampilan parsial, Anda dapat memanggil tindakan anak dan meminta metode tindakan berhati-hati menciptakan model yang diperlukan untuk tampilan parsial.Ini bisa berguna, misalnya di
_Layout.cshtml
. Jika Anda memiliki beberapa properti yang umum untuk semua halaman, salah satu cara untuk mencapai ini adalah menggunakan model tampilan dasar dan semua model tampilan lain mewarisi dari itu. Kemudian,_Layout
dapat menggunakan model tampilan dasar dan properti umum. The downside (yang subjektif) adalah bahwa semua model tampilan harus mewarisi dari model tampilan dasar untuk menjamin bahwa properti-properti umum selalu tersedia. Alternatifnya adalah membuat@Html.Action
di tempat-tempat umum itu. Metode tindakan akan membuat model terpisah yang diperlukan untuk tampilan parsial yang umum untuk semua halaman, yang tidak akan memengaruhi model untuk tampilan "utama". Dalam alternatif ini,_Layout
halaman tidak perlu memiliki model. Oleh karena itu semua model tampilan lain tidak perlu diwarisi dari model tampilan dasar apa pun.Saya yakin ada alasan lain untuk menggunakan
[ChildActionOnly]
atribut ini, tetapi ini sepertinya bagus untuk saya, jadi saya pikir saya akan membagikannya.sumber
sumber