Мне нужно создать ссылку, которая будет основана на моих критериях поиска.Например:
localhost/Search?page=2&Location.PostCode=XX&Location.Country=UK&IsEnabled=true
Параметры в этой ссылке являются значениями свойств в моей SearchViewModel.
В идеале я хотел бы иметь что-то в строках:
@Html.ActionLink("Search","User", Model.SearchCriteria)
Поддерживается ли это по умолчанию или мне нужно передать свойства моей модели представления в объект типа RouteValueDictionary и затем использовать это?
Моя цель - написать помощник по подкачке, который будет генерировать номера страниц и добавлятьпараметры критериев поиска для сгенерированных ссылок.
Например,
@Html.GeneratePageLinks(Model.PagingInfo, x => Url.Action("Index"), Model.SearchCriteria)
Я объединил ваши решения с предложением из книги PRO ASP.NET MVC 3 и в итоге получил следующее:
Помощник для генерации ссылок.Интересной частью является параметр pageUrlDelegate, который позже используется для вызова Url.Action для генерации ссылок:
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());
}
Затем в модели представления:
@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}
}))
)
Мне все еще не нравится свойствоимена в строках, но сейчас это нужно сделать.
Спасибо:)