2014-04-24 2 views
2

제목이 충분히 유익하지 않을 수는 있어도 죄송합니다.하지만 질문에서 무엇을 하려는지 설명하는 방법을 모르겠습니다.List 요소에서 개체 만들기

그래서 MVC 응용 프로그램이 있고 Web.config의 구성 섹션에서 내 경로를로드하고 있습니다.

구성 요소에서 필요한 모든 정보를 캡슐화하기 위해 RouteModel을 만들었습니다.

IEnumerable<RouteModel> configuredRoutes = RoutingFacade.GetAllRoutes(); 

foreach(RouteModel route in configuredRoutes) 
{ 
    routes.MapRoute(route.Name, route.Url, 
        new { controller = "Home", action = "Index", managers = route.Managers }); 
} 

관리자 키는 무시하십시오.

지금까지 그렇게 좋았지 만 제 문제는 이것입니다.
RouteModel에는 해당 경로에 대해 구성된 모든 제약 조건이있는 List<ConstraintModel>을 반환하는 Constraints 속성이 있습니다.
ConstraintModel에는 NameValue의 두 가지 속성 만 있습니다.

new { constraint1 = value1, constraint2 = value2, .. }

가 어떻게 그런 일에 내 List<ConstraintModel>을 설정할 수 있습니다 :

은 아시다시피 MapRoute 방법이 개체는 다음과 같이 구성되어, 제약 조건이 추가 object 매개 변수를?

난 정말 당신이 내 문제를 읽을 시간이 걸릴 감사 당신은 당신이 Add 방법 (MSDN article here이)가 주목됩니다 RouteCollection 클래스의 메소드를 보면 사전

+0

당신이 요구할 필요가 문제는이 쿼리 문자열에 표시하는 방법이다. querystrings은 단순한 name : value * strings *입니다. 따라서 쿼리 문자열에 복잡한 객체를 표현할 수 없으므로이를 액션에 전달할 수 없습니다 (어쨌든 GET이 아닌). POST가 다릅니다. 이것은 GET인가 POST인가 아니면 둘다인가? – Liam

+0

정말로 당신의 걱정을 이해하지 못해 죄송합니다. HTTP 메소드는 GET 될 것입니다 :) –

답변

4

에 대단히 감사합니다.

당신이 할 수있는 일은 (즉, MapRoute 확장 메서드가 결국 무엇입니까?) 을 호출하고 Route 클래스의 인스턴스를 만들 수 있습니다. 당신 제약 조건 object쌍 -

Dictionary<string, object> constraints = new Dictionary<string, object>(); 
// populate your constraints into the constraints dictionary here.. 

Dictionary<string, object> dataTokens = new Dictionary<string, object>(); 
Dictionary<string, object> defaults = new Dictionary<string, object>(); 

Route route = new Route(" <<url>> ", new MvcRouteHandler()) 
{ 
    Constraints = new RouteValueDictionary(constraints), 
    DataTokens = new RouteValueDictionary(), 
    Defaults = new RouteValueDictionary() 
}; 

routes.Add(route); 

그런 식으로, 당신은 string을 지정할 수있는 기회를 가질 수있다.

편집

또한,이 방법을 사용하는 방법에 대한 의심을 가지고 있지만 잘 MapRoute 확장 방법은 당신이 MapRoute을 정의하는 어셈블리 (분해 ILSpy를 사용하는 것이 좋습니다 관한 한 무엇에 정통한 경우 어떤 System.Web.Mvc.dll) 단계별로 가서 MapRouteRouteCollection.Add 사이의 연결을 직접 찾으십시오.

편집 2 -에 관한 경로 이름

또한 과부하 RouteCollection.Add(string name, RouteBase item)를 확인할 수 있습니다. 경로 이름을 지정할 수있는 한 가지 방법입니다.

그래서 기본적으로 당신은 가서이 작업을 수행 할 수 있습니다 :

routes.Add(" My route with dynamically loaded constraints ", route); 
+0

이것은 매우 흥미로운 대답입니다. 경로 이름을 어떻게 지정합니까? –

+0

좋은 질문입니다 - 최신 수정 내용을 확인하십시오 –

+0

이것은 내 모든 문제를 해결하는 것으로 보입니다. 나는 그것을 시도하고 뉴스로 돌아올 것입니다. 감사! –