2010-03-13 2 views
3

모두,ActionLink에 대한 routeValues ​​사전을 패스

ASP.NET MVC로 그립하기. 지금까지는 그렇게 좋았지 만, 이건 좀 이상하지. "menu.Attributes"의 위치를 ​​

Html.ActionLink(Html.Encode(menu.Name), Html.Encode(menu.Action), Html.Encode(menu.Controller), menu.Attributes, null) 

문제 변수

메뉴 = 모델 기대한다됩니다 :

나는 다음과 같이 사용하는 하이퍼 링크의 속성 사전을 포함하는 뷰 모델을 가지고 형태의 객체 : 내가 말할 수있는,이 익명의 객체가 실제로 어쨌든 반사를 통해 사전에 변환됩니다하지만 당신이 dictio를 전달할 수 없습니다에서

new { Name = "Fred", Age=24 } 

처음부터 그것에 nary!

링크 용으로 생성 된 HTML은 사전 형식을 표시합니다.

나는 어떻게 이것을합니까? 요점은 자사의 일반적이며, 컨트롤러는 I 아래 게시물에 기반

다음과 같은 시도 .... 이전에 menu.Attributes를 설정 할 수 있습니다

Html.ActionLink(Html.Encode(menu.Name), Html.Encode(menu.Action), Html.Encode(menu.Controller), new RouteValueDictionary(menu.Attributes), new Dictionary<string,object>()) 

하지만 여전히 작동하지 않습니다 (코드는 내부적으로 객체를 취하는 일반 메소드를 호출한다고 생각합니다.) 위의 (그리고 4 paramater에 사전을 전달하는 내 원래의 솔루션이에 HTML 비슷한 생산 : 시스템에서

<a href="/EditRole?Comparer=System.Collections.Generic.GenericEqualityComparer%601%5BSystem.String%5D&amp;Count=1&amp;Keys=System.Collections.Generic.Dictionary%602%2BKeyCollection%5BSystem.String%2CSystem.String%5D&amp;Values=System.Collections.Generic.Dictionary%602%2BValueCollection%5BSystem.String%2CSystem.String%5D">EditDocumentRoles</a> 

이 반사를 사용하여 완전히 잘못된 일을 일하고, 즉 ...

답변

1

RouteValueDictionary. Web.Routing, 실제로 그렇습니다.이 클래스에는 객체 또는 IDictionary를 사용하는 생성자가 있습니다.이 경우 하나의 오버로드가 필요하므로 대신 RouteValueDictionary를 전달할 수 있습니다.

EDIT : 문제는 이 부분은

new Dictionary<string,object>()) 

마지막에; null가 아니면 안된다. 그 이유는 사전의 공개 속성을 추출하여 잘못 사용되기 때문입니다. null로 변경하면 문제가 해결되는지 알려주세요.

+0

안녕하세요. 감사합니다.하지만이 방법은 작동하지 않습니다. 좀 더 정보 – Graham

+0

menu.Attributes 란 원래 업데이트? 그것은 사전의 속성을 끌어와 라우팅 매개 변수로 사용하고, 그 이유는 그 오류가 발생합니다. –

+0

menu.Attributes 자체는 IDictionary 입니다. 리플렉션을 사용하여 사전의 속성에 액세스하고 잘못 가져 오는 것임을 알고 있습니다. 개정 내가 즉, 위에서 만든 이유 나는하지 않습니다. 당신이 제안한 사전에서 routevalue를 만드는 것은 여전히 ​​반사 비트를 올바르지 않게 얻습니다. 라우트 값 사전 – Graham

0

MVC 2를 사용 중이고 IDictionary를 Html 특성의 매개 변수로 사용하는 Html.ActionLink 메서드가 두 개 이상 표시됩니다. 그 중 하나를 사용할 수없는 이유가 있습니까? 일부 기본값을 사용하여이 메소드의 짧은 형식이 필요한 경우 HtmlHelper에 어댑터 확장 메소드를 작성할 수 있습니다.

http://msdn.microsoft.com/en-us/library/system.web.mvc.html.linkextensions.actionlink(VS.90).aspx

는 아마도 내가 질문을 이해하지 않습니다.

0

Space Cow .. 나는이 질문을 직접 게시 할 수 없기 때문에 원래 ID를 잃어 버렸습니다.

이것은 ASP.NET MVC 1.0에서 사용되었습니다.dictonary을 보였다 과부하가 있었다 있지만, HTML은, 기본적으로 내가 기대했던 일을하지 사전하지만 사전 자체의 반영 유형의 내용이 아니었다 생성

. MVC 프레임 워크에서 미리 정의 된 키/값 목록 (예 : 사전)을 수락하고 HTML href를 올바르게 생성 할 수있는 방법이 없습니다. 나는 내 시나리오에서 불가능했던 익명의 개체를 만들 수했다.

1

그레이엄

menu.Attributes는 문자열 > IDictionary < 문자열이고있어서 IDictionary < 문자열 객체 > 오른쪽 기대? 값이 object 유형 인 다른 사전에 키와 값을 복사하십시오.

+0

이것은 답이었습니다. 이것은 또한 RouteValueDictionary를 생성 할 때의 대답이기도합니다 - 생성자는 Dictionary 이외의 것을 올바르게 처리하지 않습니다. –

3

MVC3에서 나를 위해 일한 해결하는 방법에 대한 제안. 사용 예 :

IDictionary<string, object> routeValues = new Dictionary<string, object>(); 

routeValues.Add("EmployeeID", 1); 

@Html.ActionLink("Employee Details", "EmployeeDetails", "Employee", new RouteValueDictionary(routeValues), null);