53

아래 면도기 페이지에 링크가 있습니다.면도기 actionlink 자동 생성? 길이 = 7?

@Html.ActionLink("Create New Profile", "Create", "Profile", new { @class="toplink" }) 

은 내가 링크를 클릭하면

<a href="/admin/profile/create?length=7" class="toplink">Create New Profile</a> 

아래 페이지 소스보기를 참조하십시오. URL은 아래와 같습니다.

http://localhost:54876/admin/profile/create?length=7 

? 길이 = 7. 이것이 자동 생성 된 이유.

+0

경로와 관련이 있어야합니다. 기본적으로,'ActionLink'는'/ Profile/Create'의 href를 생성해야합니다. 여기서'Profile'은 컨트롤러 인수이고,'Create'는 동작 메소드 인수입니다. '/ admin'이 href에 추가된다는 사실은이 문제를 강조합니다. 당신의 노선을 보여줄 수 있습니까? – RPM1984

답변

85

ActionLink 무시는 (string linkText, string actionName, Object routeValues, Object htmlAttributes) 무시와 일치합니다. 따라서 '프로필'값은 routeValues 매개 변수로 전달됩니다. 이 매개 변수와 관련하여이 함수의 동작은 모든 공용 속성을 가져 와서 링크를 생성하는 데 사용 된 경로 값 목록에 추가하는 것입니다. String에는 하나의 공용 속성 (길이) 만 있으므로 "길이 = 7"이됩니다.

사용하려는 올바른 과부하가 (string linkText, string actionName, string controllerName, Object routeValues, Object htmlAttributes) 그리고 당신은 그렇게 loke 전화 : 당신은 당신이 할 필요가있다는 @ActionLink에서 컨트롤러를 정의하고 있기 때문에

@Html.ActionLink("Create New Profile", "Create", "Profile", new {}, new { @class="toplink"}) 
+0

나를 위해 명확히 해 주시겠습니까 ...이 구조를 사용하면 내 링크가'~/Account/Manage /'로 생성됩니다 ... 내 매개 변수 뒤에 빈'new {} '를 넣어야했지만 이제는'~/Account/Manage/user = ortund' 나는'~/Account/Manage/ortund'를 원한다. 나는 거기에 가서 왜 이해가 안되는가? – Ortund

+0

재미있는 점은 공식 MVC bolierplate가이 오버로드를 오용한다는 것이다. "비밀번호 찾기"링크를 만들 때 기본적으로. 그것을 바꿔야 만했습니다. –

7

나는이의 정확한 원인 모르겠지만,로 변경 : 마지막 매개 변수를 떠날 때 나는 (MVC가 따기 과부하있는 htmlattributes를 모르는

@Html.ActionLink("Create New Profile", "Create", "Profile", new {}, new { @class="toplink" }) 

추가 된 하나입니다) 그러나 그것은 그것을 고칠 것이다. 요즈음 나는 조사하고 정확히 무슨 일이 일어나는지 알아낼 것입니다.

+0

이런 종류의 일은 잘되었지만 여전히 부랑자 링크로 끝났습니다 ... '~/Account/Manage/user = ortund'가 필요한 반면'~/Account/Manage/ortund'가 있습니다. – Ortund

+0

그냥 null을 사용하십시오. 적어도 그것이 내가 항상 사용하는 것입니다. –

0

또 한가지주의 할 예를 들어, "새 프로필 만들기"@ActionLink이 표시되는보기는 "/admin/profile/index.cshtml"일 수 있습니다. 기존 프로필을 나열하는보기입니다.이 경우 컨트롤러를 정의 할 필요가 없습니다. @ActionLink@ActionLink 인 경우 이미 ProfileController에 상대적이므로 @ActionLink

이 될 수 있습니다.
@Html.ActionLink("Create New Profile", "Create", null, new { @class="toplink" }) 

표시된 답변에 new{} 대신 null을 사용했는데 이것이 더 적절하다고 생각합니다. ActionLink 과부하는 지금까지 가장 직접적인 문제가 아닙니다.