Dans la dernière version (RC1) d'ASP.NET MVC, comment puis-je obtenir le rendu de HTML.ActionLink sous forme de bouton ou d'image à la place d'un lien?
Réponse tardive, mais vous pouvez rester simple et appliquer une classe CSS à l'objet htmlAttributes.
<%= Html.ActionLink("Button Name", "Index", null, new { @class="classname" }) %>
puis créez une classe dans votre feuille de style
a.classname
{
background: url(../Images/image.gif) no-repeat top left;
display: block;
width: 150px;
height: 150px;
text-indent: -9999px; /* hides the link text */
}
J'aime utiliser Url.Action () et Url.Content () comme ceci:
<a href='@Url.Action("MyAction", "MyController")'>
<img src='@Url.Content("~/Content/Images/MyLinkImage.png")' />
</a>
Strictement parlant, le contenu de l'adresse URL n'est nécessaire que pour le cheminement ne fait pas vraiment partie de la réponse à votre question.
Merci à @BrianLegg pour avoir signalé que cela devrait utiliser la nouvelle syntaxe de la vue Razor. L'exemple a été mis à jour en conséquence.
Empruntant à la réponse de Patrick, j'ai constaté que je devais faire ceci:
<button onclick="location.href='@Url.Action("Index", "Users")';return false;">Cancel</button>
pour éviter d'appeler la méthode post du formulaire.
Appelez-moi simpliste, mais je fais juste:
<a href="<%: Url.Action("ActionName", "ControllerName") %>">
<button>Button Text</button>
</a>
Et vous prenez juste soin de mettre en évidence le lien hypertexte. Nos utilisateurs l'adorent :)
Une réponse tardive, mais voici comment je transforme mon ActionLink en un bouton. Nous utilisons Bootstrap dans notre projet car cela le rend pratique. Peu importe le @T puisque c'est seulement un traducteur que nous utilisons.
@Html.Actionlink("Some_button_text", "ActionMethod", "Controller", "Optional parameter", "html_code_you_want_to_apply_to_the_actionlink");
Ce qui précède donne un lien comme celui-ci et il ressemble à l'image ci-dessous:
localhost:XXXXX/Firms/AddAffiliation/F0500
À mon avis:
@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>
}
J'espère que ça aide quelqu'un
Tout simplement :
<button onclick="@Url.Action("index", "Family", new {familyid = Model.FamilyID })">Cancel</button>
si vous ne voulez pas utiliser un lien, utilisez le bouton. vous pouvez aussi ajouter une image au bouton:
<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" exécute votre action au lieu de soumettre le formulaire.
Vous ne pouvez pas faire cela avec Html.ActionLink
. Vous devez utiliser Url.RouteUrl
et utiliser l'URL pour construire l'élément souhaité.
<button onclick="location.href='@Url.Action("NewCustomer", "Customers")'">Checkout >></button>
À l’aide de bootstrap, c’est l’approche la plus courte et la plus propre pour créer un lien vers une action du contrôleur qui apparaît sous la forme d’un bouton dynamique:
<a href='@Url.Action("Action", "Controller")' class="btn btn-primary">Click Me</a>
Ou utiliser des aides HTML:
@Html.ActionLink("Click Me", "Action", "Controller", new { @class = "btn btn-primary" })
Même une réponse plus tardive, mais je viens de rencontrer un problème similaire et j'ai fini par écrire ma propre extension du lien d'image HtmlHelper .
Vous pouvez en trouver une implémentation sur mon blog dans le lien ci-dessus.
Vient d’être ajouté au cas où quelqu'un recherche une implémentation.
Un moyen simple de transformer votre Html.ActionLink en un bouton (tant que BootStrap est connecté - ce que vous avez probablement) est le suivant:
@Html.ActionLink("Button text", "ActionName", "ControllerName", new { @class = "btn btn-primary" })
<li><a href="@Url.Action( "View", "Controller" )"><i class='fa fa-user'></i><span>Users View</span></a></li>
Pour afficher une icône avec le lien
Faites ce que Mehrdad dit - ou utilisez l'URL helper à partir d'une méthode d'extension HtmlHelper
telle que Stephen Walther décrit ici / et créez votre propre méthode d'extension pouvant être utilisée pour restituer tous vos liens.
Ensuite, il sera facile de rendre tous les liens sous forme de boutons/ancres ou selon votre préférence - et, plus important encore, vous pourrez changer d'avis plus tard, lorsque vous découvrirez que vous préférez une autre façon de créer vos liens.
vous pouvez créer votre propre méthode d'extension
regarde ma mise en oeuvre
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);
}
}
puis utilisez-le à votre avis, regardez mon appel
@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
)
@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?');" />
}
Il semble y avoir beaucoup de solutions sur la façon de créer un lien qui s'affiche sous forme d'image, mais aucune ne le fait apparaître comme un bouton.
Il n'y a que le bon moyen que j'ai trouvé pour faire cela. C'est un peu hacky, mais ça marche.
Ce que vous devez faire est de créer un bouton et un lien d'action séparé. Rendre le lien d'action invisible à l'aide de css. Lorsque vous cliquez sur le bouton, l'événement click du lien d'action peut être déclenché.
<input type="button" value="Search" onclick="Search()" />
@Ajax.ActionLink("Search", "ActionName", null, new AjaxOptions {}, new { id = "SearchLink", style="display:none;" })
function Search(){
$("#SearchLink").click();
}
Cela peut être pénible de le faire chaque fois que vous ajoutez un lien qui doit ressembler à un bouton, mais cela permet d'obtenir le résultat souhaité.
utiliser FORMACTION
<input type="submit" value="Delete" formaction="@Url.Action("Delete", new { id = Model.Id })" />
Url.Action()
vous donnera l'URL nue pour la plupart des surcharges de Html.ActionLink
, mais je pense que la fonctionnalité URL-from-lambda
n'est disponible que via Html.ActionLink
jusqu'à présent. Espérons qu'ils ajouteront une surcharge similaire à Url.Action
à un moment donné.
Je viens de trouver cette extension pour le faire - simple et efficace.
Pour Material Design Lite et MVC:
<a class="mdl-navigation__link" href='@Url.Action("MyAction", "MyController")'>Link Name</a>
Pour ce faire, l’actionLink et l’image doivent être séparées . Définissez l’image actionlink comme étant masquée .__, puis ajoutez un appel de déclencheur jQuery. C'est plus une solution de contournement.
'<%= Html.ActionLink("Button Name", "Index", null, new { @class="yourclassname" }) %>'
<img id="yourImage" src="myImage.jpg" />
Exemple de déclencheur:
$("#yourImage").click(function () {
$('.yourclassname').trigger('click');
});
Voici comment je l'ai fait sans script:
@using (Html.BeginForm("Action", "Controller", FormMethod.Get))
{
<button type="submit"
class="btn btn-default"
title="Action description">Button Label</button>
}
Idem, mais avec paramètres et dialogue de confirmation:
@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>
}