umbraco mvc-controller-Oberfläche, nicht mehr zurück können anzeigen von HttpPost Aktion
Überblick über das problem:
Habe ich einen Surface controller mit einer action, die aufgerufen wird, mit @Html.Action(...).
Den @Html.Aktion Aufruf erfolgt innerhalb einer Makro-Teilansicht und das makro enthalten ist, in den Inhalt einer Seite, die mit dem rich-text-editor.
(Ich bin neu hier also wenn ich dabei bin, über die Dinge der falsche Weg, dann lassen Sie es mich bitte wissen).
Die Oberfläche controller hat eine GET und eine POST-action, aber es ist die get-Aktion rief innerhalb der makro-teilweise.
Aktion zu erhalten macht fein, Sie keine Daten in das Formular führt zum erlöschen der Modell-Zustand (was ist das, was ich derzeit testen).
dem Absenden des Formulars (keine Daten eingegeben) bedeutet, dass ich in meinem BEITRAG handeln, ModelState.IsValid auf false gesetzt ist und CurrentUmbracoPage() zurückgegeben wird.
Alles in Ordnung... Keine Ausnahmen begegnet beim Debuggen...
Es ist an dieser Stelle, dass der text des Fehlers "Fehler beim laden des Partiellen View Skripts" auf der Seite angezeigt wird.
Alles was ich versuche zu tun, ist Rückkehr die gleiche Seite mit der Validierung der Nachrichten zeigt.
Details:
Umbraco v6.0.5
Den Controller, ich bin derzeit arbeiten, wird verwendet, um das Kennwort eines Benutzers zurückzusetzen. Ich habe auch einen login-conroller, der dieses Problem umgehen, indem mithilfe RedirectToCurrentUmbracoPage().
Zugriff auf die Seite, die das makro enthält, verwende ich die Adresse http://{testhost}/Reset-Passwort
der Fehler zurückgegebenen text lautet: Fehler beim laden des Partiellen View Skript (Datei: ~/Views/MacroPartials/ResetPassword.cshtml)
code in eine seperate Lösung und Ansichten, und bin-Verzeichnisse kopiert werden durch.
nuget-Paket UmbracoCMS.Gerüst verwendet wird.
- Controller-code:
public class ResetPasswordSurfaceController : SurfaceController {
[ChildActionOnly]
[HttpGet]
public ActionResult Reset(string token, string email) {
//Validation Code Omited
var user = Membership.GetUser(username);
return PartialView("Reset", new ResetPasswordSurfaceModel { UserID = user.ProviderUserKey.AsInt() });
}
[HttpPost]
public ActionResult PostReset(ResetPasswordSurfaceModel model) {
if (ModelState.IsValid) {
//Password reset code omited
return RedirectToCurrentUmbracoPage();
}
//works but only partial view content is rendered
//return PartialView("Reset",model);
return CurrentUmbracoPage();
}
}
View - ~\Views\ResetPasswordSurface\Reset.cshtml:
@model UmbracoExt.Models.ResetPasswordSurfaceModel
@using (Html.BeginUmbracoForm("PostReset", "ResetPasswordSurface")) {
@Html.EditorForModel()
<input type="submit" value="Submit" />
}
Makro-Teilansicht - ~\Views\MacroPartials\ResetPassword.cshtml:
@inherits Umbraco.Web.Macros.PartialViewMacroPage
@Html.Action("Reset", "ResetPasswordSurface")
Jede Hilfe ist willkommen.
Edit:
Entfernen der [HttpGet] - Attribut der Zurücksetzen-Aktion hat gezeigt, dass nach der PostReset Aktion aufgerufen wird, die Reset-Aktion auch genannt wird.
Umbenennen PostReset Zurücksetzen und neu-hinzufügen des httpget-Attribut, um die ursprüngliche Aktion Reset Ergebnisse in der post-Aktion wird zweimal genannt.
das zweite mal aufgerufen wird, bewirkt, dass die Ausnahme:
Kann nur UmbracoPageResult in Zusammenhang mit einem Http-POST bei der Verwendung eines SurfaceController form
Ich habe die änderungen rückgängig gemacht, so bin ich wieder auf Reset ([HttpGet]) wird aufgerufen, nachdem die PostReset Aktion.
Also das problem steht immer noch. Wie kann ich dieses Problem umgehen?
Ich muss das Ergebnis aus der PostReset Aktion.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist, wie ich dieses problem gelöst:
Ich erstellte Erweiterung Methode für Modell:
Controller-code:
Teilweise anzeigen-code:
Waren die Antworten die mir gegeben hier
Alle Kredit geht an Shannon Deminick
Post Aktion nichts zurück für die Antwort (das bit war mir neu).
Nach der post, wenn die Reset-Aktion wird ausgeführt, das zweite mal, seit dem modelstate beibehalten wird, indem eine neu instanziierte Modell, dieses Modell erbt das Modell Stand des Modells verarbeitet in der POST-Aktion (PostReset).
Beim zweiten mal die Aktion Reset genannt wurde, die Validierung Logik bedeutete es nie zu dem Punkt, wo es den gibt Teilansicht.
ich temporär umgangen, die überprüfungslogik und sicher genug der Modell-Validierung-Nachrichten angezeigt wurden.
Habe ich Fix diese Fehler vom auflösen der Konflikte: