Wann würden Sie das Attribut verwenden ChildActionOnly
? Was ist eine ChildAction
und unter welchen Umständen möchten Sie eine Aktion mit diesem Attribut einschränken?
quelle
Wann würden Sie das Attribut verwenden ChildActionOnly
? Was ist eine ChildAction
und unter welchen Umständen möchten Sie eine Aktion mit diesem Attribut einschränken?
Das ChildActionOnly
Attribut stellt sicher, dass eine Aktionsmethode nur als untergeordnete Methode in einer Ansicht aufgerufen werden kann. Für eine Aktionsmethode muss dieses Attribut nicht als untergeordnete Aktion verwendet werden. Wir verwenden dieses Attribut jedoch in der Regel, um zu verhindern, dass die Aktionsmethoden aufgrund einer Benutzeranforderung aufgerufen werden. Nachdem wir eine Aktionsmethode definiert haben, müssen wir erstellen, was beim Aufrufen der Aktion gerendert wird. Untergeordnete Aktionen sind normalerweise mit Teilansichten verbunden, obwohl dies nicht obligatorisch ist.
[ChildActionOnly] Ermöglicht den eingeschränkten Zugriff über Code in View
Implementierung von Statusinformationen für eine bestimmte Seiten-URL. Beispiel: Mit der Rasiersyntax der Zahlungsseiten-URL (nur einmal bezahlen) können bestimmte Aktionen unter bestimmten Bedingungen aufgerufen werden
// 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."
Sie verhindern also ein GET zu einem bestimmten Controller direkt, jedoch nur innerhalb eines anderen Controllers / einer anderen Aktion. Wahrscheinlich: Teilansichten.InvalidOperationException
wann eine markierte Methode<ChildActionOnly>
über den Browser aufgerufen wird?Mit [ChildActionOnly] Attribut kommentiert, kann eine Aktion Methode nur als Kind Methode aus einer Ansicht aufgerufen werden. Hier ist ein Beispiel für [ChildActionOnly]. .
Es gibt zwei Aktionsmethoden: Index () und MyDateTime () sowie die entsprechenden Ansichten: Index.cshtml und MyDateTime.cshtml. Dies ist HomeController.cs
Hier ist die Ansicht für Index.cshtml .
Hier ist die Teilansicht MyDateTime.cshtml .
Dies bedeutet, dass Sie die Teilansicht nicht direkt aufrufen können. Es kann jedoch über die Index () - Ansicht wie in der Index.cshtml aufgerufen werden
quelle
NonAction
, welchen Unterschied macht es?Sie würden es verwenden, wenn Sie es
RenderAction
in einer Ihrer Ansichten verwenden, normalerweise um eine Teilansicht zu rendern.Der Grund für das Markieren mit
[ChildActionOnly]
ist, dass die Controller-Methode öffentlich sein muss, damit Sie sie aufrufen können.RenderAction
Sie möchten jedoch nicht, dass jemand zu einer URL (z. B. / Controller / SomeChildAction) navigieren und die Ergebnisse anzeigen kann Aktion direkt.quelle
RenderAction
entwederNonActionAttribute
in realen Projekten haben?private
oder zu erstellenprotected
. Ich kann mir keinen guten Grundpublic
RenderAction
Zu Ihrer Information, [ChildActionOnly] ist in ASP.NET MVC Core nicht verfügbar. siehe einige Infos hier
quelle
Ein bisschen spät zur Party, aber ...
Die anderen Antworten erklären gut, welche Wirkung das
[ChildActionOnly]
Attribut hat. In den meisten Beispielen habe ich mich jedoch immer wieder gefragt, warum ich eine neue Aktionsmethode erstellen würde, um eine Teilansicht in einer anderen Ansicht zu rendern, wenn Sie einfach@Html.Partial("_MyParialView")
direkt in der Ansicht rendern könnten . Es schien eine unnötige Schicht zu sein. Als ich nachforschte, stellte ich jedoch fest, dass ein Vorteil darin besteht, dass die untergeordnete Aktion ein anderes Modell erstellen und dieses an die Teilansicht übergeben kann. Das für den Teil benötigte Modell ist möglicherweise nicht im Modell der Ansicht verfügbar, in der die Teilansicht gerendert wird. Anstatt die Modellstruktur zu ändern, um die erforderlichen Objekte / Eigenschaften dort nur zum Rendern der Teilansicht abzurufen, können Sie die untergeordnete Aktion aufrufen und die Aktionsmethode das für die Teilansicht erforderliche Modell erstellen lassen.Dies kann beispielsweise in nützlich sein
_Layout.cshtml
. Wenn Sie einige Eigenschaften haben, die allen Seiten gemeinsam sind, können Sie dies erreichen, indem Sie ein Basisansichtsmodell verwenden und alle anderen Ansichtsmodelle davon erben lassen. Anschließend_Layout
können Sie das Basisansichtsmodell und die allgemeinen Eigenschaften verwenden. Der Nachteil (der subjektiv ist) ist, dass alle Ansichtsmodelle vom Basisansichtsmodell erben müssen, um sicherzustellen, dass diese gemeinsamen Eigenschaften immer verfügbar sind. Die Alternative besteht darin,@Html.Action
an diesen gemeinsamen Orten zu rendern . Die Aktionsmethode würde ein separates Modell erstellen, das für die Teilansicht benötigt wird, die allen Seiten gemeinsam ist, was sich nicht auf das Modell für die "Hauptansicht" auswirken würde. Bei dieser Alternative muss die_Layout
Seite kein Modell haben. Daraus folgt, dass alle anderen Ansichtsmodelle kein Basisansichtsmodell erben müssen.Ich bin mir sicher, dass es andere Gründe gibt, das
[ChildActionOnly]
Attribut zu verwenden, aber dies scheint mir ein guter Grund zu sein, also dachte ich, ich würde es teilen.quelle
quelle