ASP.NET MVC 4 - Umleiten nach -, Modal-Sparen mit Kind-Aktion


UPDATE - Es gibt eine Menge Beiträge über die Kind-Aktionen nicht durchführen darf umleiten Aktionen auf SO und ASP.NET Foren. Die folgende Lösung scheint die einfachste Lösung, die ich bisher gesehen habe für dieses problem. Wenn Sie dieses Problem haben - wir hoffen, Sie finden es hilfreich. Wenn es einen besseren, ich bin jedenfalls offen für Anregungen.


Habe ich schon nervenaufreibenden mein Gehirn mit dieser den ganzen Tag...

Ich habe eine FranchiseSet Modell und ein Franchise Modell die Beziehung ist, dass eine FranchiseSet hat-viele Franchises.

Auf dem FranchiseSet index-Ansicht gibt es eine übersicht von Franchise-Sets, wo jede Zeile ist anklickbar. Wenn ich auf eine Zeile klicken, habe ich wieder einen Blick aus dem Details Methode der FranchiseSetController - durch AJAX.

Innerhalb dieser Ansicht gibt es auch eine Tabelle mit allen zugehörigen Franchises für das Franchise-set. Im wesentlichen ist es eine Master/Detail - - Ansicht - Hier ist was, das aussieht wie:

ASP.NET MVC 4 - Umleiten nach -, Modal-Sparen mit Kind-Aktion

Gibt es einen Twitter-Bootstrap-modal wird verwendet, um anzeigen Erstellen Formular für die franchises. Hier ist was, das aussieht wie:

<div class="modal hide fade in" id="myModal" )>
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal">×</button>
        <h3>Modal header</h3>
      </div>
      <div id="create_franchise_modal_body" class="modal-body">
        @Html.Action("Create", "Franchise", new { FranchiseSetId = Model.FranchiseSetID })       
      </div>
      <div class="modal-footer">
        <a href="#" class="btn" data-dismiss="modal">Close</a>
        <a href="#" class="btn btn-primary">Save changes</a>
      </div>
    </div>

Innerhalb des Körpers des modal, verwende ich eine @Html.Action Helfer zu nennen, die FranchiseController Erstellen Methode:

@Html.Action("Create", "Franchise", new { FranchiseSetId = Model.FranchiseSetID })

Hier ist die modale, die erzeugt wird von:

ASP.NET MVC 4 - Umleiten nach -, Modal-Sparen mit Kind-Aktion

Die Create-Methode erfolgreich speichern der neuen Franchise, jedoch bekomme ich diesen Fehler:

Kind-Aktionen nicht durchführen darf umleiten Aktionen.

Ich habe gesehen, VIELE der posts auf StackOverflow und den ASP.NET Foren zu diesem Thema, und ich habe versucht, umzusetzen, einige der Lösungen, die - auch mit JavaScript-Weiterleitungen, aber ich war noch nicht in der Lage, diese zu arbeiten.

Ich verstehen, da bin ich bereits in der FranchiseSet Controller, dass es schon versucht zu Rendern eines view auf der Grundlage der FranchiseSet Modell, so dass das Kind Sicht - der Franchise - Modell-ist nicht definiert. Also, was ist der ideale Weg, um mit Interaktionen zwischen Eltern und Kind Aktionen?

Scheint dies ein sehr häufiges problem, ohne eine Allgemeine Lösung. Oder zumindest keine, die ich finden kann. Ich bin relativ neu ist .net mvc, also kann es nur ich sein.

Ist mit @Html.Action ein schlechtes design Wahl in diesem Szenario? Ich habe versucht, zu verwenden @Html.RenderPartial aber, dass ein 500 Internal Server error - auch wenn ich die Create-Methode setup, um wieder eine Teilansicht.

Hier sind die FranchiseController Erstellen von Aktionen - sowohl GET-und POST -, die ich benutze:

//
//GET: /Franchise/Create

public ActionResult Create(int FranchiseSetId)
{
    ViewBag.PossibleFranchiseSets = franchisesetRepository.All;
    var franchise = new Franchise { FranchiseSetId = FranchiseSetId };
    return PartialView(franchise);
} 

//
//POST: /Franchise/Create

[HttpPost]
public ActionResult Create(Franchise franchise)
{
    if (ModelState.IsValid) {
        franchiseRepository.InsertOrUpdate(franchise);
        franchiseRepository.Save();
        return RedirectToAction("Index", "FranchiseSet");
    } else {
        ViewBag.PossibleFranchiseSets = franchisesetRepository.All;
        return View();
    }
}

Den return RedirectToAction("Index", "FranchiseSet"); in Verbindung mit der @Html.Action aus der Ansicht zu sein scheint, die Quelle des Problems.

Jede Beratung wird sehr geschätzt!


LÖSUNG


Benutzte ich die geänderten modal-code, Russell unten vorgeschlagen, jedoch wechselte ich das @Html.RenderPartial Methode für die @Html.RenderAction-Methode in einen code-block.

Hier ist, wie es jetzt aussieht.

<div class="modal hide fade in" id="myModal" )>
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal">×</button>
        <h3>Modal header</h3>
      </div>
      @using (Html.BeginForm("Create", "Franchise", FormMethod.Post))
      {
         <div id="create_franchise_modal_body" class="modal-body">
           @{ Html.RenderAction("Create", "Franchise", new { FranchiseSetId = Model.FranchiseSetID }); }
         </div>
         <div class="modal-footer">
           <a href="#" class="btn" data-dismiss="modal">Close</a>
           <button type="submit" class="btn btn-primary">Save changes</button>
         </div>
      }
  </div>

Habe ich auch geändert, der controller die Create-Methode wie Russell oben vorgeschlagen.

Mit: @{ Html.RenderAction("Create", "Franchise", new { FranchiseSetId = Model.FranchiseSetID }); }

Ich Stelle es innerhalb der @{ } - tags, weil von dem, was ich hier gelernt: Html-Code.RenderPartial mir seltsam überlast-Fehler?

War ich in der Lage, um die FranchiseController umleiten zurück zu seinen Eltern - die FranchiseSetController - Index-Methode - keine Probleme. Plus es hat nicht von mir verlangen, zu JSON zurückgeben und versuchen, eine JavaScript-redirect - es ist alles Razor code anzeigen.

Ich hoffe das löst das problem, wie die Umleitung von Kind Aktionen zurück, um die Eltern.

InformationsquelleAutor PhillipKregg | 2012-06-28

Schreibe einen Kommentar