Html.ActionLink bağlantı değil, düğme veya resim olarak


326

ASP.NET MVC'nin en son (RC1) sürümünde, Html.ActionLink'in bağlantı yerine düğme veya görüntü olarak görüntülenmesini nasıl sağlayabilirim?


13
MVC 3.0 ile <a href="@Url.Action("Index","Home")"> <img src = "@ Url.Content (" ~ / Temalar / Altın / resimler / try-onit .png ")" alt = "Ana Sayfa" /> </a> Daha fazla bilgi, Bunu deneyin mycodingerrors.blogspot.com/2012/08/…
lasantha

Sadece bu "düzgün" (örneğin uzatarak yapıyor birkaç saat geçirmiş olması AjaxHelperbir ile ActionButton) düşündüm aşağıda paylaşmak istiyorum.
Gitti Kodlama

5
Yedi yıl sonra bu sorunun hala yükselişe geçmesi benim için çok komik. Görünüşe göre 2016'da bunu yapmanın hala basit ve sezgisel bir yolu yok.
Ryan Lundy

Yanıtlar:


330

Geç yanıt, ancak basit tutabilir ve htmlAttributes nesnesine bir CSS sınıfı uygulayabilirsiniz.

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

ve sonra stil sayfanızda bir sınıf oluşturun

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
Nerede bağlandığınıza bağlı olarak null öğesini bir routeValues ​​nesnesiyle değiştirmeniz gerekebilir, ancak bu benim için mükemmel bir şekilde çalışır.
David Conlisk

1
İşlem bağlantı parametresinde atadığınız Düğme adı dizesini nasıl ele alırsınız? Bu benim için işe yaramadı.
ZVenue

1
Aynı sorun benim için de linkText parametresi null veya boş dize olamaz ancak bir görüntü düğmesi değiştirme arıyorum.
Ant Swift

5
bu her şekilde kötüdür, doz tüm tarayıcılarda çalışmaz ve işlevsellik olarak bir yan etki kullanıyorsunuz. cadı onu kullanmayın çok kötü bir uygulama yapar. Çalıştığı için iyi bir çözüm yapmaz.
Pedro.The.Kid

4
@Mark - jslatts çözümü doğru olanıdır ve IE11'de çalışmaz ve sadece mevcut tarayıcılarda çalıştığı için, bir yan etki işlev olarak kullandığınız için çok kötü bir uygulamadır ve uygulama yan etkiyi değiştirirse durur Çalışma.
Pedro.The.Kid

350

Bu şekilde Url.Action () ve Url.Content () kullanmayı seviyorum:

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

Açıkçası, Url.Content sadece yol için gereklidir, sorunuzun cevabının gerçek bir parçası değildir.

@BrianLegg'e bunun yeni Razor görünüm sözdizimini kullanması gerektiğine işaret ettiği için teşekkürler. Örnek buna göre güncellendi.


Bunun için bir html yardımcısı istiyorsanız: fsmpi.uni-bayreuth.de/~dun3/archives/…
Tobias Hertkorn

6
Bu mükemmel çalışıyor. MVC5'te sözdiziminin değiştiğini ve <a href='@Url.Action("MyAction", "MyController")'> ve <img src = '@ Url.Content ("~ / Content / Images / MyLinkImage.png ") '/>. Teşekkürler
BrianLegg

NAN metni ile mi üretti? ne yapmalı
Basheer AL-MOMANI

94

Patrick'in cevabından ödünç alarak bunu yapmak zorunda olduğumu fark ettim:

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

formun post yöntemini çağırmamak için.


51

Bana basit deyin, ama ben sadece:

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

Ve sadece köprü vurgularına dikkat edin. Kullanıcılarımız buna bayılıyor :)


1
@Ben bunun çok fazla oy almamasının bir nedeni, diğer cevaplardan çok daha sonra cevaplanması. Oy vermek üzereydim ama @ Slider345'in ne dediğini test ettim ve IE 7 veya 8'de istenen şekilde çalışmadığını onaylayabilirim. Her durumda, kullanmayı seçerseniz, css'sini ayarlamayı unutmayın. text-decoration:nonebu aptal alt çizgiden kurtulmak için bağlantı (vurgulu ve aktif) . Bu bazı tarayıcılar için gereklidir (kesinlikle Firefox 11.0).
Yetti

23
Ancak düğmeleri bir öğenin içine yerleştirmemeniz gerekir, tam tersi. En azından HTML 5'te bunu yapmak için geçerli bir yol değil
Patrick Magee

1
Evet, Patrick'in açıkladığı nedenlerden dolayı bu IE10'da bile işe yaramıyor.
Ciaran Gallagher

İşlem öğesinin içinde düğmelerin iç içe yerleştirilmesi yok. stackoverflow.com/questions/6393827/…
Papa Burgundy

18

Bootstrap kullanmak, dinamik bir düğme olarak görünen bir denetleyici eylemine bağlantı oluşturmak için en kısa ve en temiz yaklaşımdır:

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

Veya Html yardımcılarını kullanmak için:

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

Temizliğe katılıyorum. 100.
Chris Catignani

15

Basitçe :

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

bu hala benim için görünümün post yöntemini çağırıyor, neden herhangi bir fikir?
DevDave

Bu geçerli bir sözdizimi değil. IE10, "SCRIPT5017: Normal ifadede sözdizimi hatası" ile bu satırda önemli bir JavaScript hatası veriyor.
Ciaran Gallagher

İyi cevap, ama onclickiçeriği location.href(yani onclick="location.href='@Url.Action(....)'") ile çevrelemeden işe yarayamadım.
SharpC

15

Geç bir cevap ama bu şekilde ActionLink'imi bir düğmeye çeviriyorum. Projemizde Bootstrap'i uygun olduğu için kullanıyoruz. @T'yi boş verin çünkü kullandığımız tek çevirmen.

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

Yukarıdaki gibi bir bağlantı verir ve aşağıdaki resim gibi görünüyor:

localhost:XXXXX/Firms/AddAffiliation/F0500

önyükleme ile düğme gösteren resim

Bana göre:

@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>

}

Umarım bu birine yardımcı olur


1
Harika çalışıyor! güzel ve basit, htmlAttribute new { @class="btn btn-primary" })+ one
Irf

15

bağlantı kullanmak istemiyorsanız düğmesini kullanın. düğmeye de resim ekleyebilirsiniz:

<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" form göndermek yerine eyleminizi gerçekleştirir.


12

Bunu ile yapamazsın Html.ActionLink. İstediğiniz Url.RouteUrlöğeyi oluşturmak için URL'yi kullanmalı ve kullanmalısınız.


Merhaba, üzgünüm MVC için çok yeniyim. Görüntüyü elde etmek için Url.RouteURL'yi nasıl kullanırım?
uriDium

Demek istediğim, basit bir ActionLink çağrısı ile iç içe bir img etiketi (veya düğme etiketi) oluşturamazsınız. Tabii ki, bir etiketin CSS'sini biçimlendirmek, onu aşmanın bir yoludur, ancak yine de bir img etiketi alamazsınız.
Mehrdad Afshari

9

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


Bu benim için IE10'da çalıştı. Basit bir bağlantı için satır içi JavaScript kullanmak zorunda kalmanıza rağmen, muhtemelen görüntü yerine bir düğme kullanmak istiyorsanız bu iyi bir çözümdür.
Ciaran Gallagher

1
(ve emin olmak için Opera, Safari, Chrome ve Firefox'ta test ettim ve işe yaradı)
Ciaran Gallagher

9

Html.ActionLink'inizi bir düğmeye dönüştürmenin basit bir yolu (BootStrap'ı taktığınız sürece - muhtemelen sahip olduğunuz gibi) şöyle:

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

8

Daha sonra yanıt, ama ben sadece benzer bir sorunla karşılaştı ve kendi Image link HtmlHelper uzantısını yazdım .

Yukarıdaki bağlantıda blogumda bir uygulama bulabilirsiniz.

Birisi bir uygulamayı avlamak durumunda ekledi.


3
Bağlantı şu anda etkin değil gibi görünüyor
d219

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

Bağlantı ile bir simge görüntülemek için


4

Mehrdad'ın söylediklerini yapın - veya url yardımcısını HtmlHelperStephen Walther'ın burada açıkladığı gibi bir uzantı yönteminden kullanın tüm bağlantılarınızı oluşturmak için kullanılabilecek kendi uzantı yönteminizi yapın.

Daha sonra, tüm bağlantıları düğme / çapa veya hangisini tercih ederseniz edin kolay olacaktır - ve en önemlisi, bağlantılarınızı oluşturmanın başka bir yolunu tercih ettiğinizi öğrendiğinizde daha sonra fikrinizi değiştirebilirsiniz.


3

kendi uzantı yönteminizi oluşturabilirsiniz
benim uygulama bakmak

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);
    }
}

sonra görüşünüzü kullanın görüşme bakmak

 @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 ve MVC için:

<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

Görüntü olarak görüntülenen bir bağlantının nasıl oluşturulacağına dair birçok çözüm var gibi görünüyor, ancak hiçbiri bir düğme gibi görünmüyor.

Bunu yapmanın iyi bir yolu var. Biraz hacky, ama işe yarıyor.

Yapmanız gereken bir düğme ve ayrı bir eylem bağlantısı oluşturmaktır. Css kullanarak eylem bağlantısını görünmez yapın. Düğmeye tıkladığınızda, eylem bağlantısının tıklama olayını tetikleyebilir.

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

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

Düğme gibi görünmesi gereken bir bağlantı eklediğiniz her seferinde bunu yapmak bir acı olabilir, ancak istenen sonucu elde eder.


1

FORMACTION kullanın

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


0

Bunu yapmamın yolu, actionLink ve görüntüyü ayrı ayrı elde etmektir. Actionlink görüntüsünü gizli olarak ayarlayın ve ardından bir jQuery tetikleyici çağrısı eklendi. Bu daha çok bir çözüm.

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

Tetikleyici örneği:

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

0

Url.Action()çoğu aşırı yükleme için çıplak URL alacak Html.ActionLink, ancak URL-from-lambdaişlevselliğin sadece Html.ActionLinkşu ana kadar kullanılabilir olduğunu düşünüyorum . Umarım bir Url.Actionnoktada benzer bir aşırı yük eklerler .


0

Ben bunu komut dosyası olmadan yaptım:

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

Aynı, ancak parametre ve onay iletişim kutusu ile:

@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>
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.