c# - ventana - vista parcial en modal mvc
Devolver una plantilla de editor como una vista parcial en un resultado de acción (3)
Tengo un modelo similar a este:
public class myModel
{
public ClassA ObjectA {get; set;}
public ClassB ObjectB {get; set;}
}
En mi vista principal, tengo etiquetas similares a esta:
<div id="section1">
<%=Html.EditorFor(m => m.ObjectA)%>
</div>
<div id="section2">
<%=Html.EditorFor(m => m.ObjectB)%>
</div>
ClassA y ClassB tienen plantillas de editor definidas.
Creé algo de JavaScript que realiza una llamada Ajax para recargar la sección1 div. Quiero que el método de acción devuelva el editor para ObjectA, ClassA.ascx que está en la carpeta EditorTemplates.
Tengo lo siguiente en mi método de acción:
public ActionResult GetData(int input)
{
// Process input here and create modelData
return PartialView("ClassA", modelData);
}
Esto da un error porque no puede encontrar la vista de ClassA.
Mi solución ha sido crear una vista parcial en la carpeta de vistas llamada "GetData" y mi retorno representa la vista GetData. La vista GetData tiene solo una línea de código:
<%=Html.RenderForModel()%>
Esto funciona, pero me preguntaba si había una forma de devolver un método de acción y una plantilla de editor.
Puntos de bonificación por envoltura de regalo:
public class CustomControllerBase : Controller
{
public PartialViewResult EditorFor<TModel>(TModel model)
{
return PartialView("EditorTemplates/" + typeof(TModel).Name, model);
}
public PartialViewResult DisplayFor<TModel>(TModel model)
{
return PartialView("DisplayTemplates/" + typeof(TModel).Name, model);
}
}
Haga que el controlador (llamado, por ejemplo, MyController) herede de CustomControllerBase, y luego:
public ActionResult MyAction(int id)
{
return EditorFor(new MyViewModel(id));
}
El código buscará "~ / Views / MyController / EditorTemplates / MyViewModel.ascx".
esto me funcionó ( mvc 4 )
public ActionResult GetData(int input)
{
// Process input here and create modelData
return PartialView("EditorTemplates/ClassA", modelData);
}
return PartialView("~/EditorTemplates/ClassA.ascx", modelData);