MVC-Oberfläche-Controller & Umbraco Aktuellen Knoten
Ich versuche zu schreiben childaction Funktion in einer Oberfläche-controller, der aufgerufen wird, indem Sie ein makro für die Darstellung einer PartialView.
Muss ich in dieser Funktion Zugang zu meiner aktuellen Seite Eigenschaften dann optimieren der gerenderten PartialView mit.
Habe ich diese von Jorge Lusar - code auf ubootstrap und es funktioniert gut auf den HttpPost ActionResult Funktion :
var renderModel = (UmbracoRenderModel)ControllerContext.RouteData.DataTokens["umbraco"];
var currentPage = renderModel.CurrentNode.AsDynamic();
Problem ist ich habe diesen Fehler geworfen [ChildActionOnly] PartialViewResult Funktion :
Unable to cast object of type 'System.String' to type 'Umbraco.Cms.Web.Model.UmbracoRenderModel'.
on 'var renderModel = (UmbracoRenderModel)ControllerContext.RouteData.DataTokens["umbraco"];'
Daten in DataTokens["umbraco"] zu ändern scheint zwischen den beiden Funktionen.
Wenn ich das diplay DataTokens["umbraco"].ToString() auf jeden, hier ist was passiert:
Auf [ChildActionOnly] public PartialViewResult Init() -> "Oberfläche" angezeigt.
Auf [HttpPort] public HandleSubmit(myModel model) -> "Umbraco.Cms.Web.Modell.UmbracoRenderModel" angezeigt.
Vielen Dank für jeden Rat hier.
Nicolas.
InformationsquelleAutor user1288337 | 2012-04-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin mit Umbraco 6.0.4 und es ist so einfach:
Wenn es null ist, dann sind Sie nicht auf eine Seite!!
Wenn es ein surface controller, ich bin nicht auf eine Seite hehe
Ein surfaceController muss erbracht werden, von einem Knoten (ich meine aus einer Vorlage mit:
Html.Action("ActionName", "MySurface")
oder buchen Sie mit:using (Html.BeginUmbracoForm("PostAction", "MySurface"))
)Danke für UmbracoContext.PageID Dies funktioniert in 7.1 auch.
InformationsquelleAutor Carlos Martinez T
Gleiche problem habe ich mit immer Aktuellen Knoten-Id im Controller-Oberfläche, während Ajax Post, wenn wir verlieren verborgenen Wert von
uformpostroutevals
.Selbst wenn ich versuche zu posten Sie diesen Wert, indem Sie es aus der form, gemacht, indem
@using (Html.BeginUmbracoForm("<ActionName>", "<Controller Name>Surface"))
Ich Noch null in allen Eigenschaften
UmbracoContext
, so wie es aussieht, ist nicht richtig initialisiert.HOTFIX: ich bin vorbei CurrentNodeId, um jede form, die schicke ich per Ajax:
Allgemein master-Seite, die ich erstelle Globale javascript-Objekt:
In jeder Anfrage-es ist einfach zu bedienen
Global.currentNodeId
als einer der Parameter derdata
:Bitte beachten Sie, dass es nur ein hot-fix und keine richtige Lösung!
InformationsquelleAutor Dmitry Zaets
Zugriff auf Ihre currentPage implementieren Sie diesen Konstruktor in Ihre Controller
Es nutzt umbracos dependency injection, um resolv Kontext Abhängigkeit und macht es verfügbar für Sie zu nutzen.
Schauen Sie sich die Dokumentation auf eine SurfaceController
https://github.com/umbraco/Umbraco5Docs/blob/5.1.0/Documentation/Getting-Started/Creating-a-surface-controller.md
Wenn Sie die aktuellen currentPage, die Sie nutzen könnten ".CurrentPage" aus dem controller. Das gibt Ihnen die aktuellen hive-Knoten.
System.InvalidOperationException: Kann nur UmbracoPageResult in Zusammenhang mit einem Http-POST bei der Verwendung der BeginUmbracoForm Helfer bei Umbraco.Cms.Web.Oberfläche.SurfaceController.get_CurrentPage()
InformationsquelleAutor dunston
Obwohl ich lieber eine einfachere Möglichkeit, ich denke ich habe eine praktikable Lösung. Der Schlüssel ist zu unterscheiden, ob der action-Methode aufgerufen wurde, wie ein Kind handeln (in der Regel via HTTP-GET) oder direkt (über HTTP-POST).
Folgende ist eine eigene Basis-Klasse, stellt einen einzigen "CurrentContent" - Eigenschaft, die dann verwendet werden können, durch Erben Oberfläche-Controller.
Immer noch, wie es scheint, es sollte ein einfacher Weg, dies zu tun.
Bryan
InformationsquelleAutor Bryan
In Umbraco 7.2.1 habe ich diese Arbeit mit dem ChildActionOnly Attribut und übergeben das Modell an die eingeschränkte Sicht aus der übergeordneten.
Nun die partielle anzeigen-code:
Und die übergeordnete Sicht, das macht das Kind-Aktion:
Hinweis: ich bin mit starken Modellen, wie ich die route entführt alle meine Dokument-Typen für ein plugin, das ich entwickle, aber wenn ich route-hijacking und nur mit UmbracoTemplatePage Modelle (Standard in Umbraco), dann würde ich den parameter ändern, auf mein Kind Maßnahmen zu ergreifen, nur RenderModel oder UmbracoTemplatePage.
Dann würde ich-pass-Modell auf dieselbe Art und Weise.
Weil es ein Kind-Aktion auf der Oberfläche-controller, das Modell, das bereits geladen wurde, im Index wird einfach nach unten weitergegeben, um das Kind handeln. Dies verhindert, dass mit GetContent code zweimal ausgeführt wird, in der pipeline.
Den Grund ging ich über das tun dies ist, ich habe einige grundlegende Informationen, die ich brauche, um zu initialisieren, my Winkel-API-Schicht mit. Wie, ob es authentifiziert, die der angemeldete Mitglied ist, usw. Schließlich habe ich einige tags drin, Kategorien, etc etc.
Ich auch bauen möchte, das plugin so effizient, wie ich kann und nicht redundante Logik. Ich dachte, alle Informationen über den Master-Ansichten-Modell, warum sollte ich suchen? Das ist, wenn ich herausgefunden, wie dies zu tun.
InformationsquelleAutor Ryan Mann
Oder wenn Ihr in einer Oberfläche-controller gibt es das Objekt
("Gehe Zu Definition")
Achten Sie darauf, dass für die null als erste gibt es ein paar Fälle, wo Sie anrufen können Sie die Aktion ohne die currentPage Kontext aufgelöst.
InformationsquelleAutor Les McCutcheon