ASP.NET MVC 4 - Redireccionar después de Guardar modal usando acción secundaria

ACTUALIZAR - Hay un montón de publicaciones sobre elLas acciones secundarias no tienen permitido realizar acciones de redireccionamiento en los foros de SO y ASP.NET. La solución a continuación parece ser la solución más sencilla que he visto hasta ahora para este problema. Si tiene este problema, con suerte lo encontrará útil. Si hay uno mejor, estoy abierto a sugerencias.

He estado destrozando mi cerebro con esto todo el día ...

tengo unFranquiciaSet modelo y unFranquicia modelo - la relación es que un FranchiseSet tiene muchas Franquicias.

En la vista de índice de FranchiseSet hay una tabla de conjuntos de franquicias donde se puede hacer clic en cada fila. Cuando hago clic en una fila, devuelvo una vista desde laDetalles método de laFranchiseSetController - A través de AJAX.

Dentro de esa vista también hay una tabla que muestra todas las Franquicias relacionadas para ese conjunto de Franquicias. Esencialmente, es unMaestro / Detalle Ver - Esto es lo que parece:

Se está utilizando un modo de inicio de Twitter para mostrar el formulario Crear para franquicias. Esto es lo que parece:

<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>

Dentro del cuerpo del modal, estoy usando un@Html.Action ayudante para llamar alFranchiseController crea método:

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

Aquí está el modal que se genera a partir de eso:

El método Crear está guardando exitosamente la nueva Franquicia, sin embargo, recibo este error:

Las acciones secundarias no tienen permitido realizar acciones de redireccionamiento.

He vistoUN MONTÓN de publicaciones en StackOverflow y en los foros de ASP.NET sobre este problema, y ​​he intentado implementar algunas de las soluciones, incluso utilizando redirecciones de JavaScript, pero todavía no he podido hacer que esto funcione.

Entiendo que, dado que ya estoy dentro del FranchiseSet Controller, que ya está intentando representar una vista basada en el modelo FranchiseSet, la vista secundaria (del modelo de franquicia) no está definida. Entonces, ¿cuál es la forma ideal de lidiar con las interacciones entre las acciones de padres e hijos?

Este parece ser un problema muy común sin una solución común. O al menos no uno que pueda encontrar. Soy relativamente nuevo en .net mvc, así que podría ser solo yo.

Esta usando@Html.Action ¿Una mala elección de diseño en este escenario? He tratado de usar@Html.RenderPartial pero eso provoca un error del servidor interno 500, incluso si tengo la configuración del método Crear para devolver una vista parcial.

Aquí están las acciones de creación de FranchiseController, tanto GET como POST, que estoy usando:

//
// 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();
    }
}

losreturn RedirectToAction("Index", "FranchiseSet"); en conjunción con el@Html.Action Desde la vista parece ser la fuente del problema.

Cualquier consejo es muy apreciado!

SOLUCIÓN

Usé el código modal modificado que Russell sugirió a continuación, sin embargo, cambié el método @ Html.RenderPartial por el método @ Html.RenderAction dentro de un bloque de código.

Aquí está lo que parece ahora.

<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>

También modifiqué el método Crear del controlador, como Russell sugirió anteriormente.

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

Lo estoy poniendo dentro de la@{ } etiquetas debido a lo que aprendí aquí:Html.RenderPartial me da error de sobrecarga extraño?

Pude hacer que el FranchiseController redirigiera nuevamente a su matriz, el método del Índice FranchiseSetController, sin problemas. Además, no era necesario que devolviera JSON e intentara hacer una redirección de JavaScript, es todo el código de vista de Razor.

Espero que esto resuelva el problema de cómo redirigir desdeNiño acciones de regreso a laPadre.

Respuestas a la pregunta(1)

Su respuesta a la pregunta