Necesito crear un enlace que se basará en mis criterios de búsqueda. Por ejemplo:¿Puedo pasar un enlace de ver modelo a acción para generar una ruta?
localhost/Search?page=2&Location.PostCode=XX&Location.Country=UK&IsEnabled=true
parámetros de este enlace son los valores de las propiedades en mi SearchViewModel.
Idealmente me gustaría tener algo en la línea de:
@Html.ActionLink("Search","User", Model.SearchCriteria)
Es esto apoyado por defecto o tengo que pasar propiedades de mi modelo de vista en un objeto de tipo RouteValueDictionary y luego usar eso?
Mi objetivo es escribir un ayudante de paginación que genere números de página y agregue los parámetros de los criterios de búsqueda a los enlaces generados.
E.g.
@Html.GeneratePageLinks(Model.PagingInfo, x => Url.Action("Index"), Model.SearchCriteria)
He combinado sus soluciones con la sugerencia de PRO libro de ASP.NET MVC 3 y terminó con lo siguiente:
ayudante para generar enlaces. Lo interesante es el parámetro pageUrlDelegate que luego se utiliza para invocar Url.Action para los enlaces que generan:
public static MvcHtmlString PageLinks(this HtmlHelper html, PagingInfoViewModel pagingInfo,
Func<int,String> pageUrlDelegate)
{
StringBuilder result = new StringBuilder();
for (int i = 1; i <= 5; i++)
{
TagBuilder tagBuilder = new TagBuilder("a");
tagBuilder.MergeAttribute("href", pageUrlDelegate(i));
tagBuilder.InnerHtml = i.ToString();
result.Append(tagBuilder.ToString());
}
return MvcHtmlString.Create(result.ToString());
}
Luego, en el modelo de vista:
@Html.PageLinks(Model.PagingInfo, x => Url.Action("Index","Search", new RouteValueDictionary()
{
{ "Page", x },
{ "Criteria.Location.PostCode", Model.Criteria.Location.PostCode },
{ "Criteria.Location.Town", Model.Criteria.Location.Town},
{ "Criteria.Location.County", Model.Criteria.Location.County}
}))
)
Todavía no estoy feliz con los nombres de propiedades de cadenas, pero tendrá que hacer por ahora.
Gracias :)
Hola Darin, gracias por su respuesta. Probablemente usaré tu segundo consejo y crearé un ayudante para generar enlaces de página. –
Consulte la edición –