2011-09-07 9 views
0

MVC3 앱이 있습니다. http://app/survey/Test과 같은 URI의 경우 다음과 같은 설문 조사/{name}이 효과적입니다.매개 변수가있는 MVC 라우팅

이 설문 조사 컨트롤러는 각 질문은 사용자가 URI 히트 경우
가능한 답변은 DropdownListBox 또는

이제 다른 목록 친화적 인 제어에 넣어 가능한 답변을 잔뜩 가지고 질문
의 무리를로드 http://app/survey/Test?city=London 나는 London이 Question "City"의 기본값이 될 것이라는 내 Model.Question [i] .PossibleAnswers 컬렉션에서 어떻게 든 알아 내려고합니다. 사용자가 다음 http://app/survey/Test?gender=Male&city=London&something=SomethingElse
같은 URI를 칠 경우

는 내가 테스트 설문 조사
을 표시 할 그리고 그것은 성 질문
그것은이다 도시의 질문은 뭔가 질문이

을 SOMETHINGELSE하는 디폴트 런던
, 기본값은 남성이 기본값입니다

의미가 있습니까?
아무도 설정하는 방법을 알고 있습니까?

다소 불투명하기 때문에 미안하지만이 점을 설명하는 것이 가장 좋습니다.

감사

+0

단지 대략적인 생각입니다.하지만 컨트롤러가 이미 http : // app/survey/test에 응답하고 있으므로 컨트롤러 매개 변수에서 쿼리 매개 변수를 확인하는 체크를 만들 수 있습니다. 특정 매개 변수가 채워지면 특정 사용자에 대한 기본값으로 ViewModel (강력한 유형의 뷰 모델 사용을 전제로)을 설정할 수 있습니다. – Rob

답변

0

당신은 다음과 같이 바인딩 모델을 사용하여 다음이 SurveyModel를 사용할 수있는 액션 메소드에 controllor 행동에

SurveyModel

를 전달할 수 있습니다. 등

public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
     { 
      IValueProvider valueProvider = bindingContext.ValueProvider; 

      string id = valueProvider.GetValueOrNullString("id"); 
      string id2 = valueProvider.GetValueOrNullString("id2"); 
      string id3 = valueProvider.GetValueOrNullString("id3"); 
      string id4 = valueProvider.GetValueOrNullString("id4"); 

      return new SurveyModel {Id = id, Id2 = id2, Id3 = id3, Id4 = id4}; 
     } 

도시 SurveyModel.id2에 대한 ID, 참조 Google Links for More details

0

과 같이, 당신의 HttpGet 행동 모델을 지정하는 것보다 당신은 무엇이든을 할 필요가 없습니다 :

[HttpGet] 
public ActionResult Test(Survey survey) 
{ } 

GET 액션에서 모델을 지정하면 쿼리 문자열 값은 QueryStringValueProvider에 의해 소비되므로 모델에 전달됩니다.이 값을 사용하면 추가 작업없이 모델에 바인딩 할 수 있습니다.