¿Cuál es el mejor método para conservar los resultados de una publicación de formulario (modelo de vista) en la página de resultados de búsqueda?ASP.NET MVC RouteValueDictionary y objeto complejo
Tengo un formulario de búsqueda que contiene casillas de verificación. Esta forma es construir utilizando un modelo de vista como la
public class SearchViewModel
{
public string Name { get; set; }
public string[] Colors { get; set; }
}
Cuando este modelo de vista que se envía de vuelta utilizo los valores para construir una consulta (utilizando EF). Los resultados se convierten en una PagedList.
public class SearchController : Controller
{
public ActionResult Index()
{
//this displays the search form.
return View();
}
public ActionResult Results(string game, SearchViewModel vm)
{
//this displays the results
ViewBag.SearchViewModel = vm;
var matches = _repository.AsQueryable()
.ColorOr(vm.Colors)
.WhereIf(vm.Name.IsNotEmpty(), x => x.Name.Contains(vm.Name.Trim()));
return View(matches.ToPagedList(1, 10));
}
}
Ahora que los resultados se muestran quisiera utilizar Html.PagedListPager y RouteValueDictionary para crear paginación.
@Html.PagedListPager((IPagedList)Model, page => Url.Action("Results", new RouteValueDictionary(ViewBag.SearchViewModel)))
Sin embargo; la URL creada se ve así:
http://localhost:5139/search?Name=test&Colors=System.String[]&PageIndex=0
Los valores para los colores termina siendo no el tipo de los valores. Tenía la esperanza de la URL se parece más a:
http://localhost:5139/search?Name=test&Colors=[Blue,Pink,Yellow]&PageIndex=0
- ¿Cuál es el mejor método para conservar los resultados de un formulario de envío (vista del modelo) a través de la página de resultados de búsqueda?
- ¿Puede RouteValueDictionary soportar objetos complejos?
- Debo usar algo como unbinder
- ¿Sería mejor utilizar ViewData o Session?
Wow. Esta es mi pregunta exacta. +1 –