Как повторить то же самое ASP.NET Действие MVC еще раз?

StackOverflow https://stackoverflow.com/questions/513942

Вопрос

У меня есть действие под названием List, которое показывает результаты поиска.Он получает параметры через строку запроса, поскольку они являются необязательными.Моя сигнатура метода выглядит следующим образом:

public ActionResult List(List<int> categoryIDs, string school, int? stateID, int? page)

CategoryIDs - это поле с несколькими вариантами выбора, и я делаю все по запросу GET.Что мне нужно сделать, это создать в моем представлении ссылку на следующую страницу, но сохранить те же параметры поиска.Я знаю, что могу создать ссылку вручную, но можно использовать любой встроенный метод маршрутизации, особенно когда идентификаторы категорий должны быть отформатированы как "?CategoryID=1&CategoryID= 2 &CategoryID = 3" для привязки к списку?

Это было полезно?

Решение

Я думаю, что нет никакого ActionLink перегрузка, которая поможет вам сделать это по умолчанию.Вам нужно заполнить RouteValueDictionary экземпляр с параметрами, которые вы хотите включить.

Для получения списка категорий попробуйте s / t like categoryIDs=2,3,4,5 и т.д.поскольку повторяющиеся ключи не разрешены в RouteValueDictionary.После этого в методе action нужно будет разобрать строку в список целых чисел.

Другие советы

Вы должны быть в состоянии сделать это:

Все текущие значения должны быть переданы по умолчанию.Однако мне нужно было бы попробовать это, чтобы убедиться, что я ссылаюсь на правильную перегрузку.

Мне нравится передавать объект в качестве параметра в поисковые действия, а затем передавать объект параметра в представление.Итак, с некоторым кодом в вашем контроллере, подобным этому (обратите внимание, что я использую Класс Роба Конери "Список страниц"):

public class SearchParameters {
    public string School { get; set; }
    public int? StateID { get; set; }
    public int? Page { get; set; }

    public SearchParameters GetPage(int page) {
        return new SearchParameters {
            School = School,
            StateID = StateID,
            Page = page
        };
    }
}

public class SearchViewModel {
    public PagedList<[YourResultType]> Results { get; set; }
    public SearchParameters Parameters { get; set; }
}

// ...

public ActionResult Search(SearchParameters parameters) {
    IQueryable<[YourResultType]> query;
    // ... do some stuff to get your search results

    return View("Search", new SearchViewModel {
        Results = query.ToPagedList(parameters.Page - 1), 15),
        Parameters = parameters
    });
}

Таким образом, ваше представление поиска наследуется от generic ViewPage<T> с объявлением страницы, подобным этому:

<%@ Page ... Inherits="ViewPage<SearchViewModel>" %>

Затем в своем режиме поиска вы можете сделать что-то вроде этого...

<% for(int i = 0; i < Model.Results.TotalPages; i++) { %>
    <%= Html.ActionLink(i + 1).ToString(), "Search",
        Model.Parameters.GetPage(i + 1)) %>
<% } %>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top