Necesito actualizar Múltiple de una llamada Ajax, estoy confundido en cuanto a cómo devolver estas vistas múltiples desde el método de acción del controlador.Devolución de múltiples vistas parciales de una sola acción del controlador?
Respuesta
Solo puede devolver un valor de una función, por lo que no puede devolver múltiples parciales desde un solo método de acción.
Si está intentando devolver dos modelos a una vista, cree un modelo de vista que contenga los dos modelos que desea enviar y convierta el modelo de su vista en el nuevo ViewModel. P. ej.
Su modelo de vista se vería así:
public class ChartAndListViewModel
{
public List<ChartItem> ChartItems {get; set;};
public List<ListItem> ListItems {get; set;};
}
A continuación, el controlador de la acción sería:
public ActionResult ChartList()
{
var model = new ChartAndListViewModel();
model.ChartItems = _db.getChartItems();
model.ListItems = _db.getListItems();
return View(model);
}
Y finalmente el punto de vista sería:
@model Application.ViewModels.ChartAndListViewModel
<h2>Blah</h2>
@Html.RenderPartial("ChartPartialName", model.ChartItems);
@Html.RenderPartial("ListPartialName", model.ListItems);
Tal vez esta solución puede ayuda:
http://www.codeproject.com/Tips/712187/Returning-More-Views-in-an-ASP-NET-MVC-Action
Hay un muy buen ejemplo aquí ....
http://rhamesconsulting.com/2014/10/27/mvc-updating-multiple-partial-views-from-a-single-ajax-action/
Crear un método de ayuda a empaquetar la vista parcial ...
public static string RenderRazorViewToString(ControllerContext controllerContext,
string viewName, object model)
{
controllerContext.Controller.ViewData.Model = model;
using (var stringWriter = new StringWriter())
{
var viewResult = ViewEngines.Engines.FindPartialView(controllerContext, viewName);
var viewContext = new ViewContext(controllerContext, viewResult.View, controllerContext.Controller.ViewData, controllerContext.Controller.TempData, stringWriter);
viewResult.View.Render(viewContext, stringWriter);
viewResult.ViewEngine.ReleaseView(controllerContext, viewResult.View);
return stringWriter.GetStringBuilder().ToString();
}
}
Crear una acción de controlador para agrupar las múltiples vistas parciales ....
[HttpPost]
public JsonResult GetResults(int someExampleInput)
{
MyResultsModel model = CalculateOutputData(someExampleInput);
var totalValuesPartialView = RenderRazorViewToString(this.ControllerContext, "_TotalValues", model.TotalValuesModel);
var summaryValuesPartialView = RenderRazorViewToString(this.ControllerContext, "_SummaryValues", model.SummaryValuesModel);
return Json(new { totalValuesPartialView, summaryValuesPartialView });
}
Cada vista parcial puede utilizar su ow n modelo si es necesario o puede agruparse en el mismo modelo que en este ejemplo.
A continuación, utilice una llamada AJAX para actualizar todas las secciones de una sola vez:
$('#getResults').on('click', function() {
$.ajax({
type: 'POST',
url: "/MyController/GetResults",
dataType: 'json',
data: {
someExampleInput: 10
},
success: function (result) {
if (result != null) {
$("#totalValuesPartialView").html(result.totalValuesPartialView);
$("#summaryValuesPartialView").html(result.summaryValuesPartialView);
} else {
alert('Error getting data.');
}
},
error: function() {
alert('Error getting data.');
}
});
});
Si desea utilizar este método para una petición GET, necesita eliminar el decorador [HttpPost]
y añadir JsonRequestBehavior.AllowGet
al producto devuelto JsonResult
:
return Json(new { totalValuesPartialView, summaryValuesPartialView }, JsonRequestBehavior.AllowGet);
- 1. ASP.NET MVC: ¿Es una mala idea devolver diferentes vistas desde una sola acción del controlador?
- 2. Publique un formulario con vistas parciales múltiples
- 3. Cómo actualizar múltiples vistas parciales al hacer clic en Ajax.Actionlink
- 4. Devolución de una redirección 301 desde una acción de controlador
- 5. Use una sola acción para múltiples modelos
- 6. Pruebas de carriles vistas parciales independiente
- 7. ASP.NET MVC, vistas parciales y datos
- 8. ¿Cómo paso múltiples modelos a vistas parciales en ASP.NET MVC
- 9. Vistas parciales frente a Json (o ambas)
- 10. Permitir múltiples roles para acceder a la acción del controlador
- 11. Overriding controller AuthorizeAttribute para una sola acción
- 12. Vistas de maquinillas de afeitar frente a vistas parciales
- 13. Convención de nomenclatura para diferenciar vistas parciales de vistas normales
- 14. Render acción del controlador desde otro controlador
- 15. ¿Cómo acceder al valor de hiddenField en la acción del controlador de devolución de mvc asp.net?
- 16. ASP.NET MVC vistas parciales lento?
- 17. crear una única vista html para vistas parciales múltiples en angularjs
- 18. ASP.NET MVC: ¿Lugar correcto para vistas parciales?
- 19. ¿Puedo obtener el tipo de devolución de una acción desde un filtro de acción?
- 20. almacenamiento en caché vistas parciales en asp.net MVC
- 21. Representación de vistas parciales usando ajax
- 22. ASP.net MVC3 - Vistas de maquinilla de afeitar y vistas parciales con Atrasados de Ajax
- 23. ¿Está bien poner JavaScript en vistas parciales?
- 24. jQuery, llamando a una devolución de llamada una sola vez después de múltiples animaciones
- 25. Anula una acción del controlador de Rails Engine
- 26. ASP.NET MVC Vistas parciales en Java Spring MVC
- 27. ¿Es una mala práctica devolver vistas parciales que contengan javascript?
- 28. ¿Manera correcta de usar _viewstart.cshtml y vistas parciales de Razor?
- 29. Rendering Parciales En Ver un controlador de Vista a otro controlador de rieles en
- 30. Caché de vistas parciales en ASP.NET MVC 3
¿Qué está tratando de lograr? –
Tengo una página con dos vistas parciales, una que muestra un gráfico y la otra una lista de elementos que está representada en un gráfico; están hechas en dos vistas parciales diferentes. Ahora, para una agrupación diferente, estos dos valores cambiarían, un trabajo obvio podría ser convertirlos en una única vista parcial que quiero evitar. Como independientemente, se pueden usar con más frecuencia en mi aplicación. – Nikshep
¿Por qué no simplemente haces dos llamadas ajax? – frennky