ASP.NET Razor의 HTML.ActionLink 및 Url.Action


답변:


508

예, 차이가 있습니다. 태그 만 Html.ActionLink생성하고 URL 만 반환합니다.<a href=".."></a>Url.Action

예를 들면 다음과 같습니다.

@Html.ActionLink("link text", "someaction", "somecontroller", new { id = "123" }, null)

생성합니다 :

<a href="/somecontroller/someaction/123">link text</a>

다음을 Url.Action("someaction", "somecontroller", new { id = "123" })생성합니다.

/somecontroller/someaction/123

자식 컨트롤러 작업을 실행하는 Html.Action 도 있습니다 .


14
@PankajUpadhyay, asp.net mvc 애플리케이션에서 URL을 다룰 때 항상 html 또는 url 도우미를 사용해야합니다. 수백 개의 링크가 있더라도이를 사용 Html.ActionLink하여 생성하십시오. 그러한 미세 최적화를 시도하지 마십시오. 뷰에서 추악한 코드로 끝납니다.
Darin Dimitrov

2
dat는 링크를 렌더링 할 때 모든 상황에서 Url.Action보다 Html.ActionLink ()를 선호해야 함을 의미합니다. BTW, 그렇다면 asp.net 웹 사이트의 Microsoft 공식 자습서 (MVC Music Store)가 링크가 필요할 때마다 Url.Action을 가장 많이 사용한 이유는 무엇입니까?
Pankaj Upadhyay

7
@PankajUpadhyay, 앵커 태그 ( <a>) 를 생성해야 할 때 Html.ActionLink를 사용하십시오 . URL 만 생성해야하는 경우 Url.Action을 사용하십시오 (이는 컨트롤러 작업에도 사용될 수 있음).
Darin Dimitrov

3
@Shimmy, 여기에서 읽을 수 있습니다 : haacked.com/archive/2009/11/17/aspnetmvc2-render-action.aspx
Darin Dimitrov

3
나는 이것이 오래된 게시물이라는 것을 알고 있지만 경험에서 배운 것입니다. Url.Action보다 훨씬 더 수행합니다 Html.ActionLink. 나는 2를 가진 6,000 개의 아이템 목록을 가지고 있었다 Html.ActionLinks. 목록을 렌더링하는 데 6,600ms가 걸렸습니다. Html.ActionLinks그것 없이는 52ms가 걸렸습니다. Url.Action그것을 사용 하는 데 270ms가 걸렸습니다. 물론 6000 개 항목은 큰 목록이지만 나중에 참조 할 수 있도록 추가하겠다고 생각했습니다.
roberocity

42

Html.ActionLink<a href=".."></a>태그를 자동으로 생성합니다 .

Url.Action URL 만 생성합니다.

예를 들면 다음과 같습니다.

@Html.ActionLink("link text", "actionName", "controllerName", new { id = "<id>" }, null)

생성합니다 :

<a href="/controllerName/actionName/<id>">link text</a>

@Url.Action("actionName", "controllerName", new { id = "<id>" }) 

생성합니다 :

/controllerName/actionName/<id>

내가 좋아하는 최고의 플러스 포인트 Url.Action(...)

다른 HTML 태그로도 링크 된 텍스트를 쉽게 설정할 수있는 앵커 태그를 직접 작성하고 있습니다.

<a href="@Url.Action("actionName", "controllerName", new { id = "<id>" })">

   <img src="<ImageUrl>" style"width:<somewidth>;height:<someheight> />

   @Html.DisplayFor(model => model.<SomeModelField>)
</a>

12
<p>
    @Html.ActionLink("Create New", "Create")
</p>
@using (Html.BeginForm("Index", "Company", FormMethod.Get))
{
    <p>
        Find by Name: @Html.TextBox("SearchString", ViewBag.CurrentFilter as string)
        <input type="submit" value="Search" />
        <input type="button" value="Clear" onclick="location.href='@Url.Action("Index","Company")'"/>
    </p>
}

위의 예에서 특정 작업을 수행하는 데 버튼이 필요하면 @ Url.Action으로 수행해야하지만 링크를 원하면 @ Html.ActionLink를 사용합니다. 요점은 액션 URL과 함께 일부 요소 (HTML)를 사용해야 할 때입니다.


10

@HTML.ActionLink를 생성합니다 HTML anchor tag. 동안 당신을 위해 @Url.Action생성 URL합니다. 당신은 그것을 쉽게 이해할 수 있습니다.

// 1. <a href="https://stackoverflow.com/ControllerName/ActionMethod">Item Definition</a>
@HTML.ActionLink("Item Definition", "ActionMethod", "ControllerName")

// 2. /ControllerName/ActionMethod
@Url.Action("ActionMethod", "ControllerName")

// 3. <a href="https://stackoverflow.com/ControllerName/ActionMethod">Item Definition</a>
<a href="@Url.Action("ActionMethod", "ControllerName")"> Item Definition</a>

이 두 가지 접근 방식은 다르며 전적으로 귀하의 필요에 달려 있습니다.


2

적절한 CSS 스타일을 사용하여 Html.ActionLink 를 버튼으로 쉽게 표시 할 수 있습니다 . 예를 들면 다음과 같습니다.

@Html.ActionLink("Save", "ActionMethod", "Controller", new { @class = "btn btn-primary" })

5
이것은 HTML.ActionLink와 Url.Action의 차이점에 대한 원래의 질문에 대답하지 않는 것 같습니다. 아마도 대답 대신 주석을 사용해야합니다.
Fencer04

귀하의 답변은 원래 검색어를 즐겁게하지 않습니다.
Arsman Ahmad

0

아래 코드를 사용하여 버튼을 만들었고 저에게 효과적이었습니다.

<input type="button" value="PDF" onclick="location.href='@Url.Action("Export","tblOrder")'"/>

1
나는 당신이 질문을 다시 읽어야한다고 생각합니다. @Pankaj Upadhyay는 완전히 다른 것을 요구하고 있습니다.
Arsman Ahmad
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.