2009-10-08 1 views
3

페이징을 수행해야하는 컨트롤러에 작업 메서드가 있습니다. 쿼리 번호에 페이지 번호와 페이지 크기 매개 변수를 전달합니다. 내가 가지고있는 문제는 내가 만드는 첫 번째 요청이 모든 후속 호출에 대한 매개 변수를 설정한다는 것입니다.ASP.NET MVC 작업 메서드 첫 번째 요청 후 쿼리 문자열의 매개 변수가 변경되지 않습니다.

routes.MapRoute("GetStuff", "Stuff/{key}", new {controller = "Stuff", action = "GetStuff"}); 

내 응용 프로그램을 디버깅 시작, 내가 URL/재료/My_Stuff로 이동하여 키 매개 변수가 정확하고, 페이지와 페이지 크기가 모두 null 인 :

public ActionResult GetStuff(string key, int? page, int? pageSize) 
{ 
    // do something magical 
} 

내 경로는 다음과 같습니다 기대했던대로. 두 번째 호출을 url/Stuff/My_Stuff? page = 2 & pageSize = 3으로하면, page와 pageSize의 값은 여전히 ​​null입니다. 앱을 다시 시작하고 첫 번째 호출에 페이지 및 페이지 크기 매개 변수를 포함 시키면 모든 것이 정상적으로 작동하지만 후속 호출에서이 값을 변경하면 첫 번째 호출에서 값이 유지됩니다. 사실, 내 경로를 구성하는 주요 매개 변수조차도 내 URL을 변경하더라도 동일한 값을 유지합니다. 내가 뭘 놓치고 있니?

Windows Server 2003에서 IIS 6.1을 사용하고 있습니다. 확장 할 수없는 경로를 사용하고 있습니다. 또한 실제 코드는 VB.Net에 있지만 문제는 아니라고 생각합니다. 그러나 전체 공개의 경우 위 코드는 실제 코드가 아닌 실제 코드를 나타냅니다.

+0

DI 컨테이너를 사용하고 있습니까? –

+1

내 컨트롤러를 반환하는 데 하나를 사용하고 컨트롤러의 수명을 확인하고 일시적으로 설정하여 예상대로 작동했습니다. 나는 그 행동을 기대하지 않았을 것이다. 감사. 평판을 원하면 질문에 답하면 대답을 수락합니다. 특히 컨트롤러를 재사용 할 때이 동작이 나타나는 이유를 알고 있다면. 공장에서 컨트롤러를 가져온 후에 메서드 호출과 매개 변수 매핑이 일어날 것으로 예상됩니다. 나는 이것을 더 조사해야 할 것이다. 감사. – NerdFury

+0

감사합니다, 담당자가 아프지 않아 :) –

답변

3

나는 DI 컨테이너 (Castle Windsor)를 사용하여 내 컨트롤러를 생성했기 때문에 동일한 문제가있었습니다. Castle 클래스의 기본 수명 정책은 Singleton (나에게 묻는 이상한 기본값)이기 때문에 Controller 클래스의 수명 설정 때문에 문제가 발생했습니다.

컨트롤러 인스턴스가 응용 프로그램의 수명 기간 동안 한 번만 만들어지기 때문에 매개 변수가 첫 번째 값에 걸리는 것으로 보입니다.

수명을 Transient로 설정하면 문제가 해결됩니다.

관련 문제