2012-08-07 4 views
0

나는 다음과 같은 동시에 문자열과 int 값으로 목록을 작성하고 싶습니다 :새보기를 만들지 않고 다른 유형의 매개 변수를 사용하는 방법은 무엇입니까?

@Html.ActionLink("Back to List", "IndexEvent", new { location = "location" }) 

@Html.ActionLink("Back to List", "IndexEvent", new { locationID = 1 }) 

그것은 작동하지 않았다. MVC 컨트롤러 매개 변수의 형식 차이를 얻지 못했을 것 같아요. 그래서 새로운 Action을 "IndexEvenyByID"로 만들어야했지만 새로운 뷰가 필요합니다. 이후 간단하게 유지하기 위해 다른 매개 변수와 관련하여 동일한 뷰를 사용할 수있는 방법이 있습니까?

답변

1

시도이 같은 IndexEvent 행동이 개 선택적 매개 변수를 추가 :

public ActionResult IndexEvent(string location = "", int? locationID = null) 
+0

내가 개인적 대한 테스트를 선호 null int 다음에 0 기반 int (누가 알겠습니까? 아마도 인덱스로 0을 사용하려고합니다). 즉, 그냥 (문자열 위치, int? locationID) – Pluc

+0

예, 좀 더 일반적인 솔루션처럼 들린다. –

+0

데이터를 검색하는 방법을 결정하기 위해 null 매개 변수를 테스트해야 데이터 검색 방법에 전용 인 두 가지 작업을 수행하는 것과 비교할 수 있습니다. 지저분해질 수 있으며 누군가가 URL을 가지고 있고 null도 아니면 둘 다 아닌 경우 어떻게 될지와 같은 질문을 제기합니다. 별도의 작업을 수행하는 것은 일반적으로 클리닝 방법입니다. – Tommy

1

이 새로운 뷰 또는 뷰 모델을 필요가 없습니다. 당신이 설명대로 두 가지 작업을해야하지만, 같이 할 수있는 코드는 다음과 같습니다

컨트롤러

public ActionResult GetEvents(string location){ 
    var model = service.GetEventsByLocation(location); 
    return View("Events", model); 
} 

public ActionResult GetEventsById(int id){ 
    var model = service.GetEventsById(id); 
    return View("Events", model); 
} 

서비스

public MyViewModel GetEventsByLocation(string location){ 
    //do stuff to populate a view model of type MyViewModel using a string 
} 

public MyViewModel GetEventsById(int id){ 
    //do stuff to populate a view model of type MyViewModel using an id 
} 

기본적으로, 당신의보기에 갈 경우 동일한 뷰 모델을 사용하고 변화하는 유일한 방법은 해당 데이터를 얻는 방법입니다. 뷰를 완전히 재사용 할 수 있습니다.

0

단일 작업 및 다중 유형을 실제로 사용하려는 경우 개체 매개 변수를 사용할 수 있습니다. 그런

public ActionResult GetEvents(object location) 
{ 
    int locationID; 
    if(int.TryParse(location, out locationID)) 
     var model = service.GetEventsByID(locationID); 
    else 
     var model = service.GetEventsByLocation(location as string); 
    return View("Events", model); 
} 

뭔가 (completly 잘하지만, 그것은 당신에게 아이디어를 제공하지 않음). 그러나 이것은 실제로 IMO를 수행하는 "깨끗한"방법이 아닙니다.

(편집)

그러나이 개 조치 방법에 의해 여전히 훨씬 바람직 (예. 우리는 INT에 위치 이름을 구문 분석 할 수? 있다면 어떻게됩니까)

관련 문제