2008-10-19 4 views
2

ASP.NET MVC 베타의 ActionLink 메서드에 이상한 문제가 발생했습니다. MVC 미래의 람다 오버로드를 사용할 때 ViewData에서 가져온 매개 변수를 지정할 수없는 것처럼 보입니다.ASP.NET MVC 베타에서 ViewData 매개 변수로 ActionLink가 실패 함

<%= Html.ActionLink<PhotoController>(p => p.Upload(((string)ViewData["groupName"])), "upload new photo") %> 

html로 빈 URL과 링크가 포함되어

나는이 때.

<a href="">upload new photo</a> 

그러나 나는 하드 코딩과 같이 매개 변수의 경우 :

<%= Html.ActionLink<PhotoController>(p => p.Upload("groupA"), "upload new photo") %> 

출력 실제 URL이 포함되어 있습니다.

<a href="/group/groupA/Photo/Upload">upload new photo</a> 

나는 이것이 아마도을 ViewData의 가시성 및 가용성을 함께 할 수있는 뭔가가 가정 및 람다는 프레임 워크의 내부에 의해 평가됩니다 때이없는. 그러나 이것은 단지 추측 일뿐입니다.

첫 번째 샘플에서 잘못된 결과가 발생 했나요? 아니면 버그가 부족한가요?

업데이트 : 최신 MVC 미래 버전을 사용하고 있습니다. 이것이 일부 사람들에게는 효과가 있다는 지적이 있습니다. 그것은 나를 위해 작동하지 않기 때문에 이것은 내가하고있는 일에 특정한 것이라고 생각하게 만듭니다. 이 사람이 정말로 저를 곤란하게했기 때문에 다음에 무엇을보아야하는지에 대한 제안이있는 사람이 있습니까?

답변

0

그래, 내 문제가 무엇인지 알았어.

필자는 뷰에서 읽으려는 ViewData 슬롯을 설정하지 않았으므로 결과적으로 null 값이됩니다.

그래서 효과적으로 내가 작성되었습니다

<%= Html.ActionLink<PhotoController>(p => p.Upload(null), "upload new photo") %> 

나는이 모든 일의 궁극적 인 키커는 매개 변수 (그룹 이름)가 내 라우팅 테이블이 아닌 defaultable 값을 나타낸다는 사실이었다 생각합니다.

routes.MapRoute(
    "Group", 
    "group/{groupname}/{controller}/{action}/{id}", 
    new {controller = "Photos", action = "View", Id = ""}); 

따라서 라우팅 규칙에 따라 상기 속성 그룹 이름이 존재하는 것으로하지만, 람다는 gropname (NULL)을 생략 갈있어서 갖는다. 이로 인해 MVC 프레임 워크에서 내 쿼리를 만족하는 경로를 찾지 못하고 null 만 반환합니다.

2

강력한 형식의 동작 링크가있는 Microsoft.Web.Mvc.dll의 버전을 업데이트 한 적이 있습니까?

분명히이 DLL은 베타 릴리스 용으로 업데이트되었습니다. 함수가 약간 수정되었을 수 있습니다.

난 그냥이

<%= Html.ActionLink<HomeController>(x=>x.Search((string)ViewData["search"]), "search?") %> 

을 시도하고 괜찮 았는데.

+0

내 Microsoft.Web.Mvc 버전은 1.0.31003.0입니다. ASP.NET MVC의 10 월 16 일 릴리스에서 CodePlex에서 다운로드했습니다. 그래서 내가 잘못하고있는 것 같아 보이지만, 뭐라구? –

관련 문제