Сделайте Html.ActionLink вокруг изображения в ASP.NET MVC?
Как я могу сделать что-то похожее на HTML.ActionLink () за исключением размещения сгенерированной ссылки вокруг изображения вместо того, чтобы просто выплюнуть ссылку?
6 ответов:
Бритва (Вид Двигателя):
<a href="@Url.Action("ActionName", "ControllerName")"> <img src="@Url.Content("~/Content/img/imgname.jpg")" /> </a>
ASPX (View Engine):
<a href="<%= Url.Action("ActionName", "ControllerName") %>"> <img src="<%= Url.Content("~/Content/img/imgname.jpg") %>" /> </a>
очевидно, что если вы делаете это более одного раза, напишите помощника для него. И заполните другие атрибуты img / a. но это должно дать вам общее представление.
попробуйте что-то вроде этого:
public static string ActionLinkWithImage(this HtmlHelper html, string imgSrc, string actionName) { var urlHelper = new UrlHelper(html.ViewContext.RequestContext); string imgUrl = urlHelper.Content(imgSrc); TagBuilder imgTagBuilder = new TagBuilder("img"); imgTagBuilder.MergeAttribute("src", imgUrl); string img = imgTagBuilder.ToString(TagRenderMode.SelfClosing); string url = UrlHelper.Action(actionName); TagBuilder tagBuilder = new TagBuilder("a") { InnerHtml = img }; tagBuilder.MergeAttribute("href", url); return tagBuilder.ToString(TagRenderMode.Normal); }
надеюсь, что это помогает
первый ответ, данный @Craig Stuntz, абсолютно идеален, но меня беспокоит, что вы будете делать, если у вас есть
Ajax.ActionLink
вместоHtml.ActionLink
. Здесь я объясню простые решения для обоих методов. Вы можете сделать следующее дляHtml.ActonLink
:@Html.Raw(@Html.ActionLink("[replacetext]", "Index", "Home").ToHtmlString().Replace("[replacetext]", "<img src=\"/Contents/img/logo.png\" ... />"))
та же концепция может быть применена для
Ajax.ActionLink
@Html.Raw(@Ajax.ActionLink("[replacetext]", "Index", "Home", new AjaxOptions { UpdateTargetId="dvTest"}).ToHtmlString().Replace("[replacetext]", "<img src=\"/Contents/img/logo.png\" … />"))
так что это будет легко для вас.
Edit:
ActionLink Изображение с таблицей стилей или именем класса
С Таблица стилей
@Html.Raw(@Ajax.ActionLink("[replacetext]", "Index", "Home", new AjaxOptions { UpdateTargetId="dvTest"}).ToHtmlString().Replace("[replacetext]", "<img src=\"/assets/img/logo.png\" style=\"width:10%\" ... />"))
С Именем Класса
<style> .imgClass { width:20% }
@Html.Raw(@Ajax.ActionLink("[replacetext]", "Index", "Home", new AjaxOptions { UpdateTargetId="dvTest"}).ToHtmlString().Replace("[replacetext]", "<img src=\"/assets/img/logo.png\" class=\"imgClass\" ... />"))
для получения дополнительной информации о ActionLink вокруг изображения посетите ActionLink вокруг изображения внутри Asp.net MVC
более легкий...
изменить ваш код:
<p class="site-title">@Html.ActionLink(" ", "Index", "Home", new { style = "background: url('" + Url.Content("~/images/logo.png") + "') no-repeat center right; display:block; height:50px;width:50px;" })</p>
вы можете использовать url.содержание:
@Url.Content("~/images/img/slide.png")
Это возвращает относительный путь
вы можете создать htmlhelper, который может возвращать изображение со ссылкой... В качестве параметров вы передадите значения htmlhelper, такие как путь к изображению и ссылка, а в htmlhelper вы будете использовать StringBuilder для правильного форматирования html этого связанного изображения...
ура