2010-04-13 7 views
6

ASP.NET 4 RTM으로 프로젝트를 업그레이드했습니다. 오늘 ASP.NET MVC 2.0 RTM으로 변경하십시오.ASP.NET 4 RTM의 선택적 경로 매개 변수가 이전처럼 작동하지 않습니다.

나는 이전에 ASP.NET 3.5ASP.NET MVC 2.0 RTM을 사용하고있었습니다.

일부 경로가 갑자기 작동하지 않아 그 이유를 알 수 없습니다. 3.5와 4.0 사이에 뭔가가 변경되었는지 확신 할 수 없거나 4.0 RTM의 회귀 유형 문제 일 경우 잘 모르겠습니다. (이전에 내 응용 프로그램을 4.0으로 테스트 한 적이 없었습니다.)

URL을 생성 할 때 모호성을 피하기 위해 Url.RouteUrl("route-name", routeParams)을 사용하고 싶습니다. 갤러리 페이지의 경로 정의는 다음과 같습니다. imageID을 선택하길 원합니다 (지정하지 않으면 미리보기 이미지 페이지가 나타납니다). .NET에서

// gallery id 
routes.MapRoute(
    "gallery-route", 
    "gallery/{galleryID}/{imageID}/{title}", 
    new { controller = "Gallery", action = "Index", 
      galleryID = (string) null, 
      imageID = (string) null, 
      title = (string) null} 
); 

3.5/ASP.NET 2.0 RTM/IIS7은

Url.RouteUrl("gallery-route", new { galleryID = "cats"}) 
=> /gallery/cats 

Url.RouteUrl("gallery-route", new { galleryID = "cats", imageID = "4")    
=> /gallery/cats/4 

Url.RouteUrl("gallery-route", new { galleryID = "cats", imageID = "4", title = "tiddles") 
=> /gallery/cats/4/tiddles 

.NET 4.0 RTM/ASP.NET 2.0 RTM/IIS7에서 이전

Url.RouteUrl("gallery-route", new { galleryID = "cats"}) 
=> null 

Url.RouteUrl("gallery-route", new { galleryID = "cats", imageID = "4")    
=> /gallery/cats/4 

Url.RouteUrl("gallery-route", new { galleryID = "cats", imageID = "4", title = "tiddles") 
=> /gallery/cats/4/tiddles 

내가 제공 할 수 있습니다 galleryID과 그 외 모든 것은 생성 된 URL에서 무시됩니다. 그러나 이제는 모든 매개 변수를 title까지 지정해야 할 필요가 있거나 URL을 결정하는 것을 포기합니다.

들어오는 URL은 /gallery/cats을 위해 잘 작동하고 올바르게 imageIDtitle 모두 내 컨트롤러에 null을 할당되는으로이 규칙을 통해 매핑됩니다.

또한 INCOMING 경로를 http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx으로 테스트했는데 모두 정상적으로 작동합니다.

+0

내가 그것을 정말 감사하겠습니다. 난 단지 하나의 기계 : - ( –

답변

5

UrlParameter.Optional 필드 사용 ASP.NET MVC 2.0에서 선택적 매개 변수를 지정하는 올바른 방법 : 예상대로

public class GalleryController : Controller 
{ 
    public ActionResult Index(string galleryID, string imageID, string title) 
    { 
     return View(); 
    } 
} 

이 모든 작동합니다 다음 컨트롤러와 액션을 가정

routes.MapRoute(
    "gallery-route", 
    "gallery/{galleryID}/{imageID}/{title}", 
    new 
    { 
     controller = "Gallery", 
     action = "Index", 
     galleryID = UrlParameter.Optional, 
     imageID = UrlParameter.Optional, 
     title = UrlParameter.Optional 
    } 
); 

을 :

<%= Url.RouteUrl("gallery-route", new { galleryID = "cats" }) %><br/> 
<%= Url.RouteUrl("gallery-route", new { galleryID = "cats", imageID = "4"}) %><br/> 
<%= Url.RouteUrl("gallery-route", new { galleryID = "cats", imageID = "4", title = "tiddles" })%> 

렌더링 방식 :

/gallery/cats 
/gallery/cats/4 
/gallery/cats/4/tiddles 

비고 : Windows 7 x64, Visual Studio 2010 RTM, ASP.NET MVC 2.0 프로젝트에서 테스트되었습니다.

+0

이 3.5 또는 4.0 프레임 워크 프로젝트가 있었나요? 내가 MVC 버전을 변경하지 않았기 때문에 뭔가가 확실히 변경되었습니다. 그리고 실제로 나는 전에 옵션으로 테스트했지만 실제로 UrlParameter를 렌더링했다고 생각했습니다. ouput URL에 대한 선택 사항입니다. 테스트 해 주셔서 감사합니다. 다른 것을 시도해 보겠습니다. –

+0

그것은 4였습니다.0 Visual Studio 템플릿을 사용하여 만든 프레임 워크 프로젝트. –

관련 문제