동작 링크에서 영역 이름을 지정하는 방법은 무엇입니까?


156

내 mvc 2 앱의 2 가지 영역에서 사용하는 공유 마스터 페이지가 있습니다. 마스터 페이지에는 현재 컨트롤러와 작업을 지정하는 작업 링크가 있지만 잘못된 영역에 있으면 링크가 작동하지 않습니다. 영역 매개 변수를 사용하는 actionlink에 과부하가 발생하지 않습니다. 가능합니까?

답변:


245

알아 냈어 ..

Html.ActionLink("Link Text", "ActionName", "ControllerName", new { Area = "AreaName" }, new{})

3
@ Pure.Krome-예. 그것에 대해 직관적 인 것은 없습니다!
Jeremy

3
Areaname 앞뒤에 공백이 없는지 확인하십시오. 그렇지 않으면 그것은 단지 그것을 무시할 것이고 ... 그리고 당신이 4 시간 동안 무엇이 잘못되었는지 궁금해 할 것입니다. 나처럼.
Piotr Kula

거기에 매개 변수를 어떻게 추가합니까?
요로

이것이 링크로 번역 된 것처럼 보입니까? 내 말은-폼이 렌더링되어 클라이언트에게 반환 될 때.
FrenkyB

79

이 직후에 다른 문제가 발생할 수 있다고 생각한 부분이 있습니다. 영역 내에서 영역이 아닌 작업으로 연결해야하는 경우 영역을 빈 문자열로 지정해야합니다.

예를 들어, 일부 MVC 코드를 영역으로 옮기고 사이트의 다른 페이지를 참조하는 마스터 페이지에서 URL을 업데이트해야한다는 것을 알았습니다.

영역에없는 URL을 지정하려면 다음을 사용하십시오.

Html.ActionLink("home", "Index", new { area = "", controller = "Home" })

4
이것은 매우 좋은 팁입니다! 그러나 MVC 2에서는 예상 결과가 나오지 않습니다. 작은 수정-Html.ActionLink ( "home", "Index", new {area = "", controller = "Home"})
Alexander Beletsky

15

사용하다:

 Html.ActionLink("Text", "ActionName", "ControllerName", new { Area = "AreaName" }, null)

참고 : 네 번째 매개 변수는 route Values를 전달하는 것이며, 빈 매개 변수를 전달하면 루트 구조를 고려하고 적절한 값을 전달하면 영역으로 사용됩니다.

또한 사용하는 것을 잊지 마세요 null또는 new{}통과하기 때문에 5 매개 변수로 null또는 new {}행동 링크를 만드는 동안 방법을 과부하가되지 않습니다 (text,action,controller,route data)또는 (text,action,controller,route data,html attribute)너무 적절한 방법을 사용


11

MVC2 제공 area="root"에서 다음과 같이 나를 위해 일했습니다.

Html.ActionLink("Home", "Index", "Home", new { Area = "root" }, new{})

6

뷰에서 영역을 많이 사용하는 경우 할 수있는 깔끔한 트릭은 상단에서 변수로 정의하는 것입니다.

@{ var awesomeArea = new { area = "Awesome" }; }

@Html.Action("Something", "Somewhere", awesomeArea)
@Html.ActionLink("Stuff", "FooBar", awesomeArea)

4

다음은 사용자가 사전 구축 된 인증 시스템에 링크 할 수있는 솔루션으로 제시 한 것입니다.

내 각 영역에는 _LoginPartial.cshtml 파일 버전이 있습니다.

응용 프로그램이 단일 버전의 파일을 사용하도록 할 수는 있지만 단일 로그인 부분을 사용하려고 할 때 계속 오류가 발생합니다.

원래 생성 된 loginpartial을 약간만 수정 한 것이지만 특정 영역에서 사용하면 잘 작동하는 것 같습니다.

다음은 모두 사용되는 코드입니다.

@if (Request.IsAuthenticated)
{
    <text>
    Hello, @Html.ActionLink(User.Identity.Name, "Manage", "Account", new { area = "" }, htmlAttributes: new { @class = "username", title = "Manage" })!
    @using (Html.BeginForm("LogOff", "Account", new { area = "" }, FormMethod.Post, new { id = "logoutForm" }))
 {
        @Html.AntiForgeryToken()
        <a href="javascript:document.getElementById('logoutForm').submit()">Log off</a>
 }
    </text>
}
else
{
    <ul>
        <li>@Html.ActionLink("Register", "Register", "Account", new { area = "" }, htmlAttributes: new { id = "registerLink" })</li>
        <li>@Html.ActionLink("Log in", "Login", "Account", new { area = "" }, htmlAttributes: new { id = "loginLink" })</li>
    </ul>
}

명시 적으로 htmlAttributes:여러 매개 변수를 사용하는 데 효과적이었습니다.
트래비스 J

2

당신은 지역에서 정보, 홈, 연락처 등의 표준 웹 응용 링크를 사용할 수없는 경우. 당신은 라인을 변경

@Html.ActionLink("Ana Sayfa", "Index", "Home", new { area = "" }, new {})

...에서

Views \ Shared_Layout.cshtml


1

내 ASP Net Core 앱에서 간단히 다음과 같이 html 속성에 영역을 추가합니다.

@Html.ActionLink("Link Text", "ActionName", "ControllerName", new { Area = "AreaName" , id = @Model.ID, name = @Model.name })

0

사용

@Html.ActionLink("DisplayText", "ActionName", "ControllerName", new { area = "AreaName"}, null)

당신이 후에 무엇을 달성합니다.

DisplayText는 (와 동일 <a href="#">DisplayText</a>), ActionName은 컨트롤러에서 호출되는 메소드이며 ControllerName은 분명히 호출하려는 컨트롤러입니다! 다음 매개 변수는 지역을 추가 할 '경로 값'입니다. Home/Index예를 들어 현재 Area에 있고 루트 로 다시 이동하려는 경우 값을 빈 문자열로 유지합니다 (예 :) new { area = ""}. 마지막 값은 'Html Attributes'이며 원하는 경우 클래스를 추가하는 위치이며 추가 null할 속성이없는 경우 이어야합니다 . 그러나 마지막 매개 변수는 'Html 속성'으로 표시됩니다. 라우트 값을 인식하려면이 값을null

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.