Как я могу сделать что-то похожее на Html.ActionLink(), за исключением размещения сгенерированной ссылки вокруг изображения вместо того, чтобы просто выплевывать ссылку?
Сделать Html.ActionLink вокруг изображения в ASP.NET MVC?
Ответ 1
Razor (View Engine):
<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. Но это должно дать вам общую идею.
Ответ 2
Попробуйте что-то вроде этого:
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);
}
Надеюсь, что это поможет
Ответ 3
Первый ответ, данный @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
Ответ 4
проще...
измените свой код на:
<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>
Ответ 5
Вы можете использовать url.content:
@Url.Content("~/images/img/slide.png")
этот возвращаемый относительный путь
Ответ 6
Вы можете создать htmlhelper, который может возвращать изображение со ссылкой... В качестве параметров вы переходите к значениям htmlhelper, таким как путь и ссылка на изображение, а в htmlhelper вы будете использовать StringBuilder для правильного форматирования html этого связанного изображения...
веселит