W najnowszym wydaniu programu ASP.NET MVC (RC1), w jaki sposób można uzyskać, aby Html.ActionLink był renderowany jako przycisk lub obraz zamiast łącza?Html.ActionLink jako przycisk lub obraz, a nie jako łącze
Odpowiedz
Późna odpowiedź, ale możesz po prostu zachować prostotę i zastosować klasę CSS do obiektu htmlAttributes.
<%= Html.ActionLink("Button Name", "Index", null, new { @class="classname" }) %>
a następnie utworzyć klasę w arkuszu stylów
a.classname
{
background: url(../Images/image.gif) no-repeat top left;
display: block;
width: 150px;
height: 150px;
text-indent: -9999px; /* hides the link text */
}
Działa to idealnie dla mnie, chociaż może być konieczne zastąpienie wartości null obiektem routeValues w zależności od miejsca, do którego się łączysz. –
+1, ponieważ jest dostępny/SEO friendly –
Jak obsługiwać ciąg znaków Button przypisany w parametrze action link. To nie działa dla mnie. – ZVenue
Nie można tego zrobić z Html.ActionLink
. Powinieneś użyć Url.RouteUrl
i użyć adresu URL do skonstruowania żądanego elementu.
Witam, przepraszam, jestem bardzo nowy w MVC. Jak mogę użyć Url.RouteURL do uzyskania obrazu? – uriDium
Co mam na myśli to, że nie można wygenerować zagnieżdżonego znacznika IMG (lub znacznika przycisku) za pomocą prostego wywołania ActionLink. Oczywiście styl CSS sam tag jest sposobem na obejście tego, ale mimo to nie można uzyskać tagu img. –
Zrób to, co mówi Mehrdad - lub użyj pomocnika url z metody rozszerzenia HtmlHelper
, takiej jak Stephen Walther, opisując here i utwórz własną metodę rozszerzenia, która może być używana do renderowania wszystkich twoich linków.
Wtedy łatwo będzie renderować wszystkie linki jako przyciski/zakotwiczenia lub dowolną inną opcję - i, co najważniejsze, później możesz zmienić zdanie, gdy dowiesz się, że faktycznie wolisz inny sposób tworzenia linków.
Nawet później odpowiedzi, ale ja po prostu wpadł na podobny problem i skończyło się pisać własne Image link HtmlHelper extension.
Możesz znaleźć implementację tego na moim blogu w powyższym linku.
Po prostu w przypadku, gdy ktoś poluje na wdrożenie.
Lubię używać Url.Action() i() Url.Content tak:
<a href='@Url.Action("MyAction", "MyController")'>
<img src='@Url.Content("~/Content/Images/MyLinkImage.png")' />
</a>
Ściśle mówiąc, Url.Content jest potrzebna tylko dla pathing naprawdę nie jest częścią odpowiedzi na swoje pytanie.
Dzięki @BrianLegg za wskazanie, że powinno się użyć nowej składni widoku Brzytwa. Przykład został odpowiednio zaktualizowany.
Jeśli potrzebujesz pomocnika html do tego: http://www.fsmpi.uni-bayreuth.de/~dun3/archives/asp-net-mvc-3-html-actionlink-image- imageactionlink-improved/483.html –
To działa idealnie. Zauważ, że w MVC5 zmieniła się składnia i powinno to być i . Dzięki –
BrianLegg
Dzięki za wskazanie tego. Zaktualizowano przykład. – jslatts
Url.Action()
będzie Ci goły URL dla większości przeciążeń Html.ActionLink
, ale myślę, że funkcjonalność URL-from-lambda
jest dostępna tylko poprzez Html.ActionLink
tak daleko. Mam nadzieję, że dodadzą w pewnym momencie podobne przeciążenie do Url.Action
.
Zadzwoń uproszczone, ale ja po prostu zrobić:
<a href="<%: Url.Action("ActionName", "ControllerName") %>">
<button>Button Text</button>
</a>
I po prostu dbać o podświetleniem hiperłącza. Nasi użytkownicy to uwielbiają :)
Nie działa dla mnie. W 8 przypadkach właśnie przesłano formularz. – Slider345
@ Jeden powód, dla którego nie ma wielu głosów, odpowiedział o wiele później niż inne odpowiedzi. Miałem zamiar zagłosować, ale przetestowałem to, co @ Slider345 powiedział i mogę potwierdzić, że to nie działa zgodnie z oczekiwaniami w IE 7 lub 8. W każdym przypadku, jeśli zdecydujesz się z niego skorzystać, nie zapomnij ustawić css link (najeżdżanie i aktywny) do "dekoracji tekstowej: none", aby pozbyć się tego głupiego podkreślenia. Jest to konieczne w przypadku niektórych przeglądarek (na pewno Firefox 11.0). – Yetti
Ale nie powinno się zagnieżdżać przycisków wewnątrz elementów, na odwrót. Przynajmniej nie jest to poprawny sposób robienia tego w HTML 5 –
Właśnie znaleziono this extension do zrobienia - proste i skuteczne.
@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?');" />
}
Wystarczy jedynie:
<button onclick="@Url.Action("index", "Family", new {familyid = Model.FamilyID })">Cancel</button>
to nadal wywołuje metodę postu widoku dla mnie, każdy pomysł, dlaczego? – DevDave
To nieprawidłowa składnia. IE10 zgłasza krytyczny błąd JavaScript w tym wierszu, "SCRIPT5017: Błąd składni w wyrażeniu regularnym". –
Dobra odpowiedź, ale bez otaczania zawartości 'onclick' za pomocą' location.href' (so 'onclick =" location.href = '@ Url.Action (....)' "') Nie mogłem go dostać praca. – SharpC
<button onclick="location.href='@Url.Action("NewCustomer", "Customers")'">Checkout >></button>
To działało dla mnie w IE10. Jest to dobre rozwiązanie, jeśli chcesz po prostu użyć przycisku, a nie obrazu, chociaż korzystanie z wbudowanego kodu JavaScript dla prostego linku prawdopodobnie nie jest idealne. –
(i dla pewności przetestowałem go w Opera, Safari, Chrome i Firefox i działało) –
Sposób, w jaki zrobili to mieć actionlink i wizerunku oddzielnie. Ustaw obraz akcji jako ukryty , a następnie dodano wywołanie wyzwalacza jQuery.To jest bardziej obejście.
'<%= Html.ActionLink("Button Name", "Index", null, new { @class="yourclassname" }) %>'
<img id="yourImage" src="myImage.jpg" />
przykład wyzwalania:
$("#yourImage").click(function() {
$('.yourclassname').trigger('click');
});
Pożyczanie od Patryka odpowiedzi, znalazłem, że muszę to zrobić:
<button onclick="location.href='@Url.Action("Index", "Users")';return false;">Cancel</button>
aby uniknąć wywoływania metody POST formularza.
Wygląda na to, że istnieje wiele rozwiązań dotyczących tworzenia linku wyświetlanego jako obraz, ale żaden nie sprawia, że wygląda na przycisk.
Jest tylko dobry sposób, który znalazłem, aby to zrobić. Jest trochę hacky, ale działa.
Co musisz zrobić, to utworzyć przycisk i osobne łącze akcji. Spraw, aby łącze akcji było niewidoczne za pomocą css. Po kliknięciu przycisku może wystrzelić zdarzenie kliknięcia linku akcji.
<input type="button" value="Search" onclick="Search()" />
@Ajax.ActionLink("Search", "ActionName", null, new AjaxOptions {}, new { id = "SearchLink", style="display:none;" })
function Search(){
$("#SearchLink").click();
}
Może być upierdliwe robić to za każdym razem, gdy dodać link, który musi wyglądać jak przycisk, ale nie osiągnąć pożądany rezultat.
Późna odpowiedź, ale w ten sposób zmieniam moje działanie w ActionLink w przycisk. Używamy Bootstrap w naszym projekcie, ponieważ jest to wygodne. Mniejsza o @T, ponieważ jest to tylko tłumacz, którego używamy.
@Html.Actionlink("Some_button_text", "ActionMethod", "Controller", "Optional parameter", "html_code_you_want_to_apply_to_the_actionlink");
Powyższe daje link jak to i wygląda jak na zdjęciu poniżej:
localhost:XXXXX/Firms/AddAffiliation/F0500
Moim zdaniem:
@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>
}
nadzieję, że pomoże komuś
Działa świetnie! ładnie i prosto, htmlAttribute 'new {@ class =" btn btn-primary "})' + jeden – Irfan
jeśli nie chcesz używać linku, użyj przycisku. można dodać obraz przycisku, a także:
<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" wykonuje swoje działania, zamiast składania formularza.
<li><a href="@Url.Action( "View", "Controller")"><i class='fa fa-user'></i><span>Users View</span></a></li>
Aby wyświetlić ikonę z linkiem
użytku FORMACTION
<input type="submit" value="Delete" formaction="@Url.Action("Delete", new { id = Model.Id })" />
To jak to zrobiłem bez skryptów:
@using (Html.BeginForm("Action", "Controller", FormMethod.Get))
{
<button type="submit"
class="btn btn-default"
title="Action description">Button Label</button>
}
samo, ale z parametrem i potwierdzenia dialog:
@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>
}
można utworzyć własną metodę rozszerzenia
wynos okiem na moje realizacji
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);
}
}
następnie używać go w widoku wziąć spojrzeć na moje wezwanie
@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
)
Korzystanie bootstrap to najkrótsza i najczystsze podejście do tworzenia łącza do działania kontrolera, który pojawia się jako przycisk dynamiczny:
<a href='@Url.Action("Action", "Controller")' class="btn btn-primary">Click Me</a>
Albo używać HTML pomocnicy:
@Html.ActionLink("Click Me", "Action", "Controller", new { @class = "btn btn-primary" })
prosty sposób zrobić dokonać Html.ActionLink do przycisku (tak długo, jak masz podłączony Bootstrap - który zapewne masz) jest tak:
@Html.ActionLink("Button text", "ActionName", "ControllerName", new { @class = "btn btn-primary" })
Z MVC 3.0 możesz wypróbować w ten sposób
Więcej informacji, Wypróbuj http://mycodingerrors.blogspot.com/2012/08/actionlink-with-image-in-aspnet-mvc-3.html –
lasantha
Po prostu spędził kilka godzin robiąc to "prawidłowo" (np przez rozszerzenie 'AjaxHelper' z' ActionButton') Myślałem, że udostępnię to poniżej. –
To dla mnie zabawne, że siedem lat później to pytanie wciąż się podnosi. Wydaje się, że w 2016 roku wciąż nie ma prostego, intuicyjnego sposobu, aby to zrobić. –