behandelt Ich habe Sitecore MVC betrachtet, aber ich bin fest, wie man einen Fall behandelt, wo meine Seite zwei Controller-Renderings hat und jedes ein Formular enthält. Ich möchte, dass die einzelnen Controller ihre HttpPost behandeln und die ganze Seite nach dem Post zurückgeben.Sitecore MVC - Wie man mehrere Formen auf Seite
Ich habe ein einfaches Beispiel eingerichtet. Beide Controller sind ähnlich:
public class ExampleController : Sitecore.Mvc.Controllers.SitecoreController
{
public override ActionResult Index()
{
return View("Index");
}
[HttpPost]
public ActionResult Index(string formPostData)
{
ViewBag.SaveForLater = formPostData;
return Index();
}
}
die Ansichten wie folgt aussehen:
@using Sitecore.Mvc
@using (Html.BeginRouteForm(Sitecore.Mvc.Configuration.MvcSettings.SitecoreRouteName, FormMethod.Post))
{
@Html.AntiForgeryToken()
var term = ViewBag.SaveForLater as string;
if (!string.IsNullOrEmpty(term))
{
<p>Submitted: @term</p>
}
<p>
@Html.Sitecore().FormHandler("Example", "Index")
<input type="text" name="formPostData" placeholder="Enter something" />
<input type="submit" name="submit" value="Search" />
</p>
}
Mit diesem Setup beide Formen reichen ihre Daten aber die zurückgegebene Seite besteht nur der Teilansicht und nicht die ganze Seite .
Wenn ich die Linie @Html.Sitecore().FormHandler("Example", "Index")
mit @Html.Sitecore().FormHandler()
ersetzen dann die ganze Seite zurückgegeben wird, aber die Post Aktion für beide Formen ist verarbeitet.
Keines der beiden Szenarien ist ideal. Ich muss etwas vermissen und würde einen Zeiger schätzen.
Danke @ kevin-brechbuhl - du machst eigentlich was ich versuche. Die Zeile '@ Html.Sitecore(). FormHandler (" Beispiel "," Index ")' tut im Grunde genau das, was Sie sagen (dh fügt die Controller- und Aktionsnamen als versteckte Felder hinzu) und scheint das Verhalten zu verursachen, mit dem Sie modelliert haben ein Attribut, das intern auftreten soll. Wenn ich diese Zeile einfüge, wird nur eine der HttpPost-Aktionen verarbeitet. Aber an dem Punkt, an dem ich die Ansicht von dieser Aktion zurücksende ('return View (Modell);' oben), verliere ich den Rest der Seite. Es wird nur der Inhalt dieser Ansicht im Browser gerendert, nicht die ganze Seite. Irgendeine Idee warum? – getsetcode
@getsetcode Wenn ich mich richtig erinnere, ist das wegen dem Sitecore FormHandler und den versteckten Feldern von Sitecore. Sitecore rendert diese Aktion nur, wenn die versteckten Felder von Sitecore verfügbar sind. Deshalb erstellen wir eigene versteckte Felder und verwenden nicht die von Sitecore. Versuchen Sie den '@ Html.Sitecore(). FormHandler (" Example "," Index ")' 'zu entfernen. –
Nochmals vielen Dank @ Kevin-Brechbuhl für Ihre Hilfe. Ich habe versucht, was Sie empfehlen, und bin jetzt auf die Ausnahme "System.InvalidOperationException: Konnte Aktionsmethode nicht aufrufen", die ich denke, macht Sinn, weil eine der zwei HttpPost-Aktionen nicht aufgrund Ihrer ValidateFormHandler getroffen wird. Ich fühle, dass ich nah bin, aber ist das ein weiterer Schritt, den du verpasst hast? Es scheint, dass Sitecore beide Post-Aktionen treffen will, ob ich es mag oder nicht :( – getsetcode