문제

검색 결과를 보여주는 목록이라는 조치가 있습니다. 선택 사항이므로 쿼리 스트링을 통해 매개 변수를 수신합니다. 내 메소드 서명은 다음과 같습니다.

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

CategoryIds는 멀티 선택 상자이며 GET 요청을 통해 모든 것을 수행하고 있습니다. 내가해야 할 일은 다음 페이지에 대한보기에 링크를 작성하지만 동일한 검색 매개 변수를 유지하는 것입니다. 나는 손으로 링크를 빌드 할 수 있지만, 특히 범주 ID가 "? categoryId = 1 & categoryID = 2 & categoryID = 3"과 같이 형식화되어야 할 때 내장 라우팅 방법을 사용할 수 있습니까?

도움이 되었습니까?

해결책

나는 없다고 생각합니다 ActionLink 기본적으로이를 수행하는 데 도움이되는 과부하. 당신은 그것을 채워야합니다 RouteValueDictionary 포함하려는 매개 변수가있는 인스턴스.

카테고리 목록의 경우 S/T를 시도해보십시오. categoryIDs=2,3,4,5 등 반복 키가 허용되지 않기 때문에 RouteValueDictionary. 그 후, 액션 방법에서 문자열을 정수 목록에 구문 분석해야합니다.

다른 팁

당신은 이것을 할 수 있어야합니다 :

모든 현재 값은 기본적으로 전달되어야합니다. 올바른 오버로드를 참조하고 있는지 확인하기 위해 시도해야합니다.

객체를 검색을 위해 매개 변수로 전달한 다음 매개 변수 객체를보기로 전달하는 것을 좋아합니다. 그래서 컨트롤러에 이와 같은 코드가 있는데 Rob Conery의 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
    });
}

따라서 검색보기는 일반 뷰 페이지에서 상속됩니다u003CT> 다음과 같은 페이지 선언으로 :

<%@ 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