Question

J'ai une action appelée liste qui montre les résultats d'une recherche. Il reçoit des paramètres par l'querystring parce qu'ils sont facultatifs. Ma signature de la méthode ressemble à ceci:

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

CategoryIDs est une boîte multi-sélection et je fais tout ce que sur une requête GET. Ce que je dois faire est de créer un lien à mon avis à la page suivante, mais conservent les mêmes paramètres de recherche. Je sais que je peux construire le lien en main, mais il est possible d'utiliser l'une des méthode de routage intégré surtout lorsque les categoryIDs doivent être formatées comme « ? CategoryID = 1 & categoryID = 2 & categoryID = 3 » d'être lié à la liste?

Était-ce utile?

La solution

Je pense qu'il n'y a pas de surcharge qui vous aide à ActionLink le faire par défaut. Vous devez remplir l'instance avec les RouteValueDictionary paramètres que vous souhaitez inclure.

Pour la liste des catégories, essayez s / t comme etc. puisque les clés categoryIDs=2,3,4,5 répétition ne sont pas autorisés dans <=>. Après cela, dans la méthode d'action devra analyser la chaîne dans la liste entière.

Autres conseils

Vous devriez être en mesure de le faire:

Toutes les valeurs actuelles doivent être transmises par défaut. Je dois essayer de bien faire que je fais référence à la surcharge correcte.

J'aime passer un objet en tant que paramètre à des actions de recherche, et ensuite passer l'objet de paramètre à la vue. Donc, avec un peu de code dans votre contrôleur comme ceci (notez que je utilise Rob Conery la classe de 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
    });
}

votre point de vue de la recherche hérite de la ViewPage générique avec une déclaration page comme ceci:

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

Alors à votre avis de recherche, vous pouvez faire quelque chose comme ça ...

<% for(int i = 0; i < Model.Results.TotalPages; i++) { %>
    <%= Html.ActionLink(i + 1).ToString(), "Search",
        Model.Parameters.GetPage(i + 1)) %>
<% } %>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top