Pergunta

Eu tenho uma ação chamada lista que mostra os resultados de uma pesquisa. Ele recebe parâmetros através da querystring porque eles são opcionais. Meu método de assinatura esta aparência:

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

CategoryIDs é uma caixa de seleção múltipla e estou fazendo tudo sobre um pedido GET. O que eu preciso fazer é criar um link na minha opinião para a próxima página, mas mantêm os mesmos parâmetros de busca. Eu sei que eu posso construir a ligação à mão, mas é possível usar qualquer um dos built-in método de roteamento especialmente quando os CategoryIDs tem que ser formatado como "? CategoryID = 1 & categoryID = 2 & categoryID = 3" em ficar vinculado à lista

Foi útil?

Solução

Eu acho que não há nenhuma sobrecarga ActionLink que ajuda você a fazer isso por padrão. Você precisa preencher a instância RouteValueDictionary com os parâmetros que deseja incluir.

Para a lista de categoria, tente s / t como categoryIDs=2,3,4,5 etc. desde chaves de repetição não são permitidos em RouteValueDictionary. Depois disso, no método de ação terá que analisar a cadeia para a lista inteira.

Outras dicas

Você deve ser capaz de fazer isso:

Todos os valores atuais devem ser passados ??por padrão. Eu teria que experimentá-lo embora para se certificar de que eu estou fazendo referência a sobrecarga correta.

Eu gosto de passar um objeto como um parâmetro para procurar ações e, em seguida, passar o objeto parâmetro para a vista. Assim, com algum código em seu controlador como este (nota que eu estou usando classe PagedList de Rob Conery ):

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

Assim, seus Search View herda do ViewPage genérica com uma declaração página como esta:

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

Então, na sua opinião busca, você pode fazer algo assim ...

<% for(int i = 0; i < Model.Results.TotalPages; i++) { %>
    <%= Html.ActionLink(i + 1).ToString(), "Search",
        Model.Parameters.GetPage(i + 1)) %>
<% } %>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top