문제

속서 이 질문,이 바뀌었어요 컨트롤러와 라우팅의 주위에 그래서 지금 정렬 값이 할당됩니까?sort=그러나 나도를 구현하는 능력하는 사용자를 위해 필터 기반으로 테이블에는 설정을 선택하의 값:

기술자:Tech1,Tech2,Tech3,etc.카테고리:Category1 을,Category2,Category3,etc.우선순위:Priority1,Priority2,Priority3,etc.

나만을 사용하여 한 테이블에서는 순간,그래서 얻는 가장 쉬운 방법은 가능한 카테고리의 목록을 필터에서 이를 선택하는 고유한 값의 범주에서는 테이블.그들은 모든 입력을 통해 HTML s 그래서 나는 무엇을 통해 얻을 넣어합니다.나는 원하지 않는 분들을 모두 다른 테이블이 아직도로 많은 일을 할 수 있으로 한 테이블 지금은 하지만 이런 시나리오의 경우는 하나의 테이블 모델한 다음,내가 조정할 수 있습니다.

을 명확히 사용하는 경우 그것은 아마 최고의 표시는 빠르의 스크린 샷에서 보기 질문:

http://images.robburke.ie/stackoverflow/491563.png
을 보려면 클릭하 전체 크기입니다.

내가 원하는 시스템을 구현하여 사용자는 예를 들어 필터는"우선 순위"에만 표시 문제를 우선 순위는"조사.

나는 방법에 대한 제안을 찾고 이를 구현하려면 모두에서 앞면과 뒷면 끝입니다.나를 찾으려고 하는 사이트는 이와 유사한 테이블의 데이터만 생각할 수 없다 하나의 내 머리 위로하지만 이는 기능이 구현되었습니다 백 배기!

할 수 있는 사람을 추천하는 좋은 방법이 있을까요?

도움이 되었습니까?

해결책

서버의 층

시작하자는 일부 의사.

public ActionResult Open(string sort, string technician, 
    string category, string priority)
{
    // generate query
    // filter stuff
    // order/sort stuff
}

그것의 중요한 순서를 얻을 수의 작업에 오른쪽,여기에.특정 진행하는 공급자(나는 당신을 보고,엔티티 프레임 워크 는)자동으로 무시를 주문하는 경우 필터링하기 전에.그래서 시작을 생성하여 정렬되지 않은 쿼리와 같이,당신의 마지막 질문 다음에 추가 필터링,그리고 마지막으로 추가됩니다.

참고로 추가했을 인수하는 작업에 대한 모든 가능한 필터는 경우입니다.는 방법 중 하나 그것을 할 수 있습니다.다른 방법으로 그것을 할 것을 허용 필터링에 대해 그냥 아무것도 반복하여 질의 문자열 변수(내부의 요청 시)치료에 아무것도 없는"종류"잠재적으로 필터입니다.당신은 무엇을 선택해야의 응용 프로그램을 맞는 최고입니다.

지금,당신은 어떻게 실제로 구현하는 필터링?무엇을 마크를 보였 방법 중 하나입니다.는 정말 잘 작동이 있는 경우에만 어떤 경우는 필터입니다.분명히,나는 그것을 넣어에서 도우미 방법보다는 행동에 자체입니다.기회는 좋은 당신이 필요하여 재사용이 도우미 및 다른 작업을 수행할 수 있습니다.그러나,당신을 제공하고자하는 필터링에 더 많은 행보다 당신문 안에 하나의 방법이,다른 방법이 사용하는 것입니다.Microsoft 동적 LINQ,라이브러리에서 얻을 수 있는 CodePlex.이를 구축할 수 있 LINQ.는 문자열을 사용하는 대신 람다 식입니다.

브라우저의 층

지금 하는 응용 프로그램이 처리 할 수 있습니다,당신은 방법이 필요를 만드는 링크는 다음과 같:

http://example.com/Issue/Open?sort=ID&priority=Investigative

이 있으면 메뉴 필터 옵션의,예를 들어,각 메뉴 항목에 해당하는 링크와 함께 다양한 쿼리 문자열을 매개 변수입니다.

이 작은 까다로운 일이기 때문에,당신은 아마 당신을 유지하려면 기존의 질의 문자열 변수를 추가할 때 새로운 하나입니다.는 경우,예를 들어,사용자 정의 문제로 ID,그리고 선택하는 필터에만 조사 우선순위 문제점,당신은 여전히 좋아 보입니다.그래서 모든 링크는 메뉴에서 필요한 쿼리를 포함하의 문자열 변수에 대한 현재 표시되는 페이지뿐만 아니라 쿼리 문자열을 매개 변수가 메뉴 항목에 대한 자체입니다.

그래서 일반적인 접근에는 우리가 때 이 일을 하는 것은,각 항목에 대한 필터링"menu"(든 링크의 구축):

  1. 을 만들 RouteValueDictionary 의 질의 문자열 변수
  2. 모두를 추가 쿼리 문자열을 전달된 매개 변수는 현재의 뷰를 사전에 있습니다.
  3. 추가 쿼리 문자열을 매개 변수에 대한 현재 메뉴 항목을 선택합니다.
  4. 생 최종 URL 을 사용하여 Html.RouteLink 고 사전에 우리가 내장합니다.

다른 팁

사용 사례를 완전히 이해하지 못하지만 필터를 쉽게 추가 할 수 있습니다. IQueryable<T>:

var query = /* your primary query */

if(!string.IsNullOrEmpty(name)) {
    query = query.Where(row => row.Name == name);
}

if(activeOnly) {
    query = query.Where(row => row.IsActive);
}

등.

구축하여 더 정교한 일을 할 수 있습니다 Expression 수동으로, 위의 내용은 디버깅하기 쉽고 컴파일러를 확인할 수 있다는 이점이 있습니다 (컴파일러는 적합한 상태가 있는지 확인합니다. IsActive 속성 등)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top