Формат html.ActionLink как кнопка или изображение, а не ссылка
в последнем выпуске (RC1) ASP.NET MVC, как мне получить Html.ActionLink для отображения в виде кнопки или изображения вместо ссылки?
22 ответа:
поздний ответ, но вы можете просто сохранить его простым и применить класс CSS к объекту htmlAttributes.
<%= 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 */ }
Мне нравится использовать Url.Действие () и Url.Содержание () вот так:
<a href='@Url.Action("MyAction", "MyController")'> <img src='@Url.Content("~/Content/Images/MyLinkImage.png")' /> </a>
строго говоря, Url.Контент нужен только для программирования не является частью ответа на ваш вопрос.
спасибо @BrianLegg за указание, что это должно использовать новый синтаксис представления Razor. Пример был обновлен соответствующим образом.
заимствуя из ответа Патрика, я обнаружил, что должен был сделать это:
<button onclick="location.href='@Url.Action("Index", "Users")';return false;">Cancel</button>
чтобы избежать вызова метода POST формы.
называй меня просто, но я просто делаю:
<a href="<%: Url.Action("ActionName", "ControllerName") %>"> <button>Button Text</button> </a>
и вы просто позаботитесь о выделении гиперссылки. Наши пользователи любят его:)
просто :
<button onclick="@Url.Action("index", "Family", new {familyid = Model.FamilyID })">Cancel</button>
поздний ответ, но вот как я делаю свою 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> }
надеюсь, что это поможет кому-то
Если вы не хотите использовать ссылку, используйте кнопку. вы также можете добавить изображение к кнопке:
<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" выполняет ваше действие вместо отправки формы.
вы не можете сделать это с помощью
Html.ActionLink
. Вы должны использоватьUrl.RouteUrl
и использовать URL для создания элемента, который вы хотите.
еще более поздний ответ, но я просто столкнулся с подобной проблемой и в конечном итоге написал свой собственный Image link HtmlHelper extension.
вы можете найти его реализацию на моем блоге по ссылке выше.
просто добавил в случае, если кто-то выслеживает реализацию.
использование bootstrap это самый короткий и чистый подход для создания ссылки на действие контроллера, которое отображается как динамическая кнопка:
<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" })
<li><a href="@Url.Action( "View", "Controller" )"><i class='fa fa-user'></i><span>Users View</span></a></li>
для отображения значка со ссылкой
делайте то, что говорит Mehrdad-или используйте помощник url из
HtmlHelper
метод расширения, как Стивен Вальтер описывает здесь и сделать свой собственный метод расширения, который может быть использован для отображения все ваши ссылки.тогда будет легко отобразить все ссылки в виде кнопок / якорей или в зависимости от того, что вы предпочитаете - и, самое главное, вы можете изменить свое мнение позже, когда узнаете, что вы на самом деле предпочитаете какой-то другой способ создания ваших ссылок.
простой способ сделать ваш Html.ActionLink в кнопку (пока у вас есть BootStrap подключен-который у вас, вероятно, есть) выглядит так:
@Html.ActionLink("Button text", "ActionName", "ControllerName", new { @class = "btn btn-primary" })
вы можете создать свой собственный метод расширения
взгляните на мою реализацию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 )
@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?');" /> }
Кажется, есть много решений о том, как создать ссылку, которая отображается как изображение, но ни одно из них не делает ее похожей на кнопку.
есть только хороший способ, который я нашел, чтобы сделать это. Его немного hacky, но это работает.
что вам нужно сделать, это создать кнопку и отдельную ссылку. Сделайте ссылку действия невидимой с помощью css. Когда вы нажимаете на кнопку, она может запустить событие click ссылки действия.
<input type="button" value="Search" onclick="Search()" /> @Ajax.ActionLink("Search", "ActionName", null, new AjaxOptions {}, new { id = "SearchLink", style="display:none;" }) function Search(){ $("#SearchLink").click(); }
Это может быть боль в приклад для этого нужно каждый раз добавлять ссылку, которая должна выглядеть как кнопка, но при этом действительно достигать желаемого результата.
использовать FORMACTION
<input type="submit" value="Delete" formaction="@Url.Action("Delete", new { id = Model.Id })" />
нашел Это расширение сделать это-просто и эффективно.
Как я это сделал, чтобы иметь actionLink и изображение отдельно. Установите изображение actionlink как скрытое а затем добавил вызов триггера jQuery. Это скорее обходной путь.
'<%= Html.ActionLink("Button Name", "Index", null, new { @class="yourclassname" }) %>' <img id="yourImage" src="myImage.jpg" />
триггера пример:
$("#yourImage").click(function () { $('.yourclassname').trigger('click'); });
Url.Action()
даст вам голый URL для большинства перегрузокHtml.ActionLink
, но я думаю, чтоURL-from-lambda
функциональность доступна только черезHtml.ActionLink
до сих пор. Надеюсь, они добавят аналогичную перегрузку вUrl.Action
в какой-то момент.
вот как я это сделал без скриптов:
@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> }