HTML.ActionLink는 링크가 아닌 단추 또는 이미지


326

ASP.NET MVC의 최신 (RC1) 릴리스에서 Html.ActionLink를 링크 대신 단추 나 이미지로 렌더링하려면 어떻게해야합니까?


13
MVC 3.0을 사용하면이 방법으로 <a href="@Url.Action("Index","Home")"> <img src = "@ Url.Content ("~ / Themes / Gold / images / try-onit .png ")"alt = "홈"/> </a> 더 많은 정보는 다음을 시도하십시오 mycodingerrors.blogspot.com/2012/08/…
lasantha

바로이 "제대로"(예를 들어, 확장하여 일을 몇 시간을 보낸 데 AjaxHelperActionButton) 나는 생각 나는 아래 공유한다.
사라 코딩

5
7 년이 지난 지금도이 질문은 여전히 ​​인기를 끌고 있다는 것이 유쾌합니다. 분명히 2016 년에는 여전히 간단하고 직관적 인 방법이 없습니다.
라이언 런디

답변:


330

늦은 응답이지만 간단하게 유지하고 htmlAttributes 객체에 CSS 클래스를 적용 할 수 있습니다.

<%= Html.ActionLink("Button Name", "Index", null, new { @class="classname" }) %>

스타일 시트에 클래스를 만듭니다

a.classname
{
    background: url(../Images/image.gif) no-repeat top left;
     display: block;
     width: 150px;
     height: 150px;
     text-indent: -9999px; /* hides the link text */
}

2
링크 위치에 따라 null을 routeValues ​​객체로 바꿔야 할 수도 있지만 이것은 완벽하게 작동합니다.
David Conlisk

1
그런 다음 액션 링크 매개 변수에서 할당 한 버튼 이름 문자열을 어떻게 처리합니까? 이것은 나를 위해 작동하지 않았습니다.
ZVenue

1
같은 문제, 나에게도 linkText 매개 변수는 null이거나 빈 문자열 일 수 없지만 이미지 버튼 교체를 찾고 있습니다.
앤트 스위프트

5
그것은 모든 종류의 방식에서 나쁘고 모든 브라우저에서 작동하지 않으며 부작용으로 기능으로 사용하고 있습니다. 마녀는 그것을 사용하지 않는 것이 매우 나쁜 연습입니다. 작동하기 때문에 좋은 해결책이 아닙니다.
Pedro.The.Kid

4
@Mark-jslatts 솔루션은 올바른 솔루션이며 IE11에서는 작동하지 않으며 현재 브라우저에서 작동하기 때문에 부작용을 기능으로 사용하고 구현이 부작용을 변경하는 경우 매우 나쁜 습관입니다. 일.
Pedro.The.Kid

350

다음과 같이 Url.Action () 및 Url.Content ()를 사용하고 싶습니다.

<a href='@Url.Action("MyAction", "MyController")'>
    <img src='@Url.Content("~/Content/Images/MyLinkImage.png")' />
</a>

엄밀히 말하면 Url.Content는 경로 지정에만 필요하며 실제로 귀하의 질문에 대한 답변의 일부는 아닙니다.

새로운 면도기 뷰 구문을 사용해야 함을 지적한 @BrianLegg에게 감사드립니다. 이에 따라 예제가 업데이트되었습니다.


당신이 원하는 경우 HTML 도우미 그것에 대해 : fsmpi.uni-bayreuth.de/~dun3/archives/...
토비아스 Hertkorn

6
이것은 완벽하게 작동합니다. MVC5에서 구문이 변경되었으며 <a href='@Url.Action("MyAction", "MyController")'> 및 <img src = '@ Url.Content ( "~ / Content / Images / 여야합니다. MyLinkImage.png ") '/>. 감사합니다
BrianLegg

NAN 텍스트로 제작 했습니까? 해야 할 일
Basheer AL-MOMANI

94

Patrick의 답변에서 차용 한 결과 다음과 같이해야합니다.

<button onclick="location.href='@Url.Action("Index", "Users")';return false;">Cancel</button>

양식의 post 메소드를 호출하지 않도록하십시오.


51

단순하다고 불러주세요.

<a href="<%: Url.Action("ActionName", "ControllerName") %>">
    <button>Button Text</button>
</a>

그리고 당신은 단지 하이퍼 링크 하이라이트를 관리합니다. 우리의 사용자는 그것을 사랑합니다 :)


1
@이 투표가 많지 않은 한 가지 이유 때문에 다른 답변보다 훨씬 늦게 답변되었습니다. 나는 투표하려고했지만 @ Slider345가 말한 것을 테스트했으며 IE 7 또는 8에서 원하는대로 작동하지 않는지 확인할 수 있습니다. 어쨌든 그것을 사용하기로 선택한 경우 CSS를 설정하는 것을 잊지 마십시오. text-decoration:none그 바보 같은 밑줄을 없애기 위한 링크 (마우스 위로 움직이고 활성화) . 이것은 일부 브라우저에 필요합니다 (Firefox 11.0).
Yetti

23
그러나 요소 안에 버튼을 중첩해서는 안됩니다. 적어도 그것은 HTML 5에서 그것을하는 유효한 방법이 아닙니다
Patrick Magee

1
그러나 Patrick이 설명하는 이유 때문에 IE10에서도 작동하지 않습니다.
Ciaran Gallagher

액션 요소 내부에 버튼이 중첩되지 않습니다. stackoverflow.com/questions/6393827/…
Papa Burgundy

18

부트 스트랩을 사용하면 동적 단추로 표시되는 컨트롤러 작업에 대한 링크를 만드는 가장 짧고 깔끔한 방법입니다.

<a href='@Url.Action("Action", "Controller")' class="btn btn-primary">Click Me</a>

또는 HTML 도우미를 사용하려면

@Html.ActionLink("Click Me", "Action", "Controller", new { @class = "btn btn-primary" })

청결에 동의해야합니다. (100)
크리스 Catignani

15

단순히 :

<button onclick="@Url.Action("index", "Family", new {familyid = Model.FamilyID })">Cancel</button>

이것은 여전히 ​​나를 위해 view의 post 메소드를 호출합니다.
DevDave

유효한 구문이 아닙니다. IE10은 "SCRIPT5017 : 정규식의 구문 오류"줄과 함께 JavaScript 치명적 오류를 발생시킵니다.
Ciaran Gallagher

좋은 대답이지만 onclick내용을 location.href(so onclick="location.href='@Url.Action(....)'")로 묶지 않으면 작동하지 못했습니다.
SharpC

15

늦은 답변이지만 이것이 ActionLink를 버튼으로 만드는 방법입니다. 우리는 프로젝트에서 Bootstrap을 편리하게 사용하고 있습니다. @T는 우리가 사용하는 유일한 번역기이므로 걱정하지 마십시오.

@Html.Actionlink("Some_button_text", "ActionMethod", "Controller", "Optional parameter", "html_code_you_want_to_apply_to_the_actionlink");

위는 이와 같은 링크를 제공하며 아래 그림과 같습니다.

localhost:XXXXX/Firms/AddAffiliation/F0500

부트 스트랩이있는 그림 데모 버튼

내 견해로는 :

@using (Html.BeginForm())
{
<div class="section-header">
    <div class="title">
        @T("Admin.Users.Users")
    </div>
    <div class="addAffiliation">
        <p />
        @Html.ActionLink("" + @T("Admin.Users.AddAffiliation"), "AddAffiliation", "Firms", new { id = (string)@WorkContext.CurrentFirm.ExternalId }, new { @class="btn btn-primary" })
    </div>
</div>

}

희망이 누군가에게 도움이되기를 바랍니다.


1
멋지다! 좋고 간단하게 htmlAttribute new { @class="btn btn-primary" })+ one
Irf

15

링크를 사용하지 않으려면 버튼을 사용하십시오. 버튼에 이미지를 추가 할 수도 있습니다.

<button type="button" onclick="location.href='@Url.Action("Create", "Company")'" >
   Create New
   <img alt="New" title="New" src="~/Images/Button/plus.png">
</button>

type = "button" 은 양식을 제출하는 대신 작업을 수행합니다.


12

으로이 작업을 수행 할 수 없습니다 Html.ActionLink. Url.RouteUrlURL을 사용 하고 사용하여 원하는 요소를 구성 해야합니다 .


안녕하세요, MVC를 처음 접했습니다. 이미지를 얻기 위해 Url.RouteURL을 어떻게 사용합니까?
uriDium

내가 의미하는 것은 ActionLink를 간단히 호출하여 중첩 된 img 태그 (또는 버튼 태그)를 생성 할 수 없다는 것입니다. 물론, 태그 자체를 CSS로 스타일링하면 태그를 해결할 수 있지만 img 태그를 얻을 수는 없습니다.
Mehrdad Afshari

9

<button onclick="location.href='@Url.Action("NewCustomer", "Customers")'">Checkout >></button>


이것은 IE10에서 나를 위해 일했습니다. 간단한 링크를 위해 인라인 JavaScript를 사용해야하는 것이 이상적이지는 않지만 이미지 대신 버튼을 사용하려는 경우에 좋은 솔루션입니다.
Ciaran Gallagher

1
(확실히 말해서 Opera, Safari, Chrome 및 Firefox에서 테스트했으며 작동했습니다.)
Ciaran Gallagher

9

Html.ActionLink를 버튼으로 만드는 간단한 방법은 (부트 스트랩이 연결되어있는 한) 아마도 다음과 같습니다.

@Html.ActionLink("Button text", "ActionName", "ControllerName", new { @class = "btn btn-primary" })


5
<li><a href="@Url.Action(  "View", "Controller" )"><i class='fa fa-user'></i><span>Users View</span></a></li>

링크가있는 아이콘을 표시하려면


4

Mehrdad의 말을 따르십시오-또는 HtmlHelperStephen Walther와 같은 확장 방법 의 URL 도우미를 사용 하십시오. 당신의 모든 링크를 렌더링하는 데 사용할 수있는 자신 만의 확장 방법을 확인하십시오.

그러면 모든 링크를 버튼 / 앵커 또는 원하는 방식으로 쉽게 렌더링 할 수 있으며, 가장 중요한 것은 나중에 링크를 만드는 다른 방법을 선호한다는 사실을 알게되면 마음을 바꿀 수 있습니다.


3

자신의 확장 방법
을 만들어 내 구현을 살펴볼 수 있습니다.

public static class HtmlHelperExtensions
{
    public static MvcHtmlString ActionImage(this HtmlHelper html, string action, object routeValues, string imagePath, string alt, object htmlAttributesForAnchor, object htmlAttributesForImage)
    {
        var url = new UrlHelper(html.ViewContext.RequestContext);

        // build the <img> tag
        var imgBuilder = new TagBuilder("img");
        imgBuilder.MergeAttribute("src", url.Content(imagePath));
        imgBuilder.MergeAttribute("alt", alt);
        imgBuilder.MergeAttributes(new RouteValueDictionary(htmlAttributesForImage));
        string imgHtml = imgBuilder.ToString(TagRenderMode.SelfClosing);

        // build the <a> tag
        var anchorBuilder = new TagBuilder("a");
        anchorBuilder.MergeAttribute("href", action != null ? url.Action(action, routeValues) : "#");
        anchorBuilder.InnerHtml = imgHtml; // include the <img> tag inside
        anchorBuilder.MergeAttributes(new RouteValueDictionary(htmlAttributesForAnchor));

        string anchorHtml = anchorBuilder.ToString(TagRenderMode.Normal);
        return MvcHtmlString.Create(anchorHtml);
    }
}

그런 다음 내 전화를 살펴보기 위해 사용하십시오.

 @Html.ActionImage(null, null, "../../Content/img/Button-Delete-icon.png", Resource_en.Delete,
               new{//htmlAttributesForAnchor
                   href = "#",
                   data_toggle = "modal",
                   data_target = "#confirm-delete",
                   data_id = user.ID,
                   data_name = user.Name,
                   data_usertype = user.UserTypeID
               }, new{ style = "margin-top: 24px"}//htmlAttributesForImage
                    )

2

Material Design Lite 및 MVC의 경우 :

<a class="mdl-navigation__link" href='@Url.Action("MyAction", "MyController")'>Link Name</a>

1
@using (Html.BeginForm("DeleteMember", "Member", new { id = Model.MemberID }))
    {
        <input type="submit" value="Delete Member" onclick = "return confirm('Are you sure you want to delete the member?');" />
    }

1

이미지로 표시되는 링크를 만드는 방법에 대한 솔루션이 많이 있지만 버튼처럼 만드는 것은 없습니다.

내가 찾은 좋은 방법이 있습니다. 약간 해 키지 만 작동합니다.

당신이해야 할 일은 버튼과 별도의 작업 링크를 만드는 것입니다. CSS를 사용하여 동작 링크를 보이지 않게하십시오. 버튼을 클릭하면 액션 링크의 클릭 이벤트를 발생시킬 수 있습니다.

<input type="button" value="Search" onclick="Search()" />
 @Ajax.ActionLink("Search", "ActionName", null, new AjaxOptions {}, new { id = "SearchLink", style="display:none;" })

function Search(){
    $("#SearchLink").click();
 }

버튼처럼 보이는 링크를 추가 할 때마다이 작업을 수행하는 데 어려움이있을 수 있지만 원하는 결과를 얻을 수 있습니다.


1

FORMACTION 사용

<input type="submit" value="Delete" formaction="@Url.Action("Delete", new { id = Model.Id })" />


0

내가 한 방법은 actionLink와 이미지를 분리하는 것입니다. 액션 링크 이미지를 숨김으로 설정 한 다음 jQuery 트리거 호출을 추가하십시오. 이것은 더 많은 해결 방법입니다.

'<%= Html.ActionLink("Button Name", "Index", null, new { @class="yourclassname" }) %>'
<img id="yourImage" src="myImage.jpg" />

트리거 예 :

$("#yourImage").click(function () {
  $('.yourclassname').trigger('click');
});

0

Url.Action()의 대부분의 과부하에 대한 기본 URL을 얻을 수 Html.ActionLink있지만 지금까지 URL-from-lambda기능을 사용할 수 있다고 생각합니다 Html.ActionLink. 바라건대 그들은 Url.Action어느 시점에서 비슷한 과부하를 추가 할 것 입니다.


0

이것이 내가 스크립팅하지 않고했던 방법입니다.

@using (Html.BeginForm("Action", "Controller", FormMethod.Get))
{
    <button type="submit" 
            class="btn btn-default" 
            title="Action description">Button Label</button>
}

동일하지만 매개 변수 및 확인 대화 상자가 있습니다.

@using (Html.BeginForm("Action", "Controller", 
        new { paramName = paramValue }, 
        FormMethod.Get, 
        new { onsubmit = "return confirm('Are you sure?');" }))
{
    <button type="submit" 
            class="btn btn-default" 
            title="Action description">Button Label</button>
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.