Как повторить то же действие ASP.NET MVC снова? - PullRequest
2 голосов
/ 05 февраля 2009

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

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

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

Ответы [ 3 ]

1 голос
/ 05 февраля 2009

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

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

0 голосов
/ 20 июля 2009

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

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
    });
}

Таким образом, ваш вид поиска наследуется от универсального ViewPage с объявлением страницы следующим образом:

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

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

<% for(int i = 0; i < Model.Results.TotalPages; i++) { %>
    <%= Html.ActionLink(i + 1).ToString(), "Search",
        Model.Parameters.GetPage(i + 1)) %>
<% } %>
0 голосов
/ 05 февраля 2009

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

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

...