2009-03-23 2 views

ответ

24

здесь мои, его основная функция сделать некоторые перегруженные

public static string ImageLink(this HtmlHelper htmlHelper, string imgSrc, string alt, string actionName, string controllerName, object routeValues, object htmlAttributes, object imgHtmlAttributes) 
    { 
     UrlHelper urlHelper = ((Controller)htmlHelper.ViewContext.Controller).Url; 
     string imgtag = htmlHelper.Image(imgSrc, alt,imgHtmlAttributes); 
     string url = urlHelper.Action(actionName, controllerName, routeValues); 



     TagBuilder imglink = new TagBuilder("a"); 
     imglink.MergeAttribute("href", url); 
     imglink.InnerHtml =imgtag; 
     imglink.MergeAttributes(new RouteValueDictionary(htmlAttributes), true); 

     return imglink.ToString(); 

    } 
+1

Не должно быть HtmlString вместо строки? с возвратом нового HtmlString (imglink.ToString()); ? – Stacker

+4

Просто укажите, что htmlHelper.Image() больше не находится в MVC4. –

+0

cant объявить htmlHelper.Image() – kasim

34
<a href="<%=Url.RouteUrl(...)%>"><img src="..." alt="..." /></a> 
+0

+1, как это самый быстрый метод я использовал из так много ответил Вот. Я просто указал действие и контроллер в этом методе, и он работал нормально. – nccsbim071

7

Создайте собственное вспомогательное расширение.

public static string Image(this HtmlHelper helper, string src, string alt) 
{ 
    TagBuilder tb = new TagBuilder("img"); 
    tb.Attributes.Add("src", helper.Encode(src)); 
    tb.Attributes.Add("alt", helper.Encode(alt)); 
    return tb.ToString(TagRenderMode.SelfClosing); 
} 
+0

Это не создает ссылку на действие изображения. Разве это не тот Зак? –

+0

, даже если это напрямую не отвечает на вопрос. Мне очень нравится этот метод для создания вспомогательного расширения тега. Спасибо :) –

9
<%= Html.ActionLink(Html.Image(imageUrl, imageAlt), actionName, controllerName) %> 

может работать, расширение изображения с фьючерсами по сборке. Или сделайте свое собственное расширение.

+0

No tag-soup. Ницца. –

+0

Кажется, не работает. Метод Html.ActionLink() представляется html для кодирования первого аргумента, поэтому все угловые скобки и т. Д. Экранированы. – macon

3
<%= Html.RouteLink("PLACEHOLDER", ...).Replace("PLACEHOLDER", "<img src=""..."" alt=""..."" />")%> 
+1

Для этого требуется куча уродливых манипуляций с строками. –

5

У меня нет достаточного количества SO чванства, чтобы добавить комментарий, но это комментарий на MiniScalope's comment above:

UrlHelper urlHelper = ((Controller)htmlHelper.ViewContext.Controller).Url;

Я бы су ggest делает этот метод является расширением HtmlHelper в себе (и упростить), для повторного использования:

private static UrlHelper Url(this HtmlHelper helper) 
{ 
    return new UrlHelper(helper.ViewContext.RequestContext); 
} 
15

Это обновленная версия, что у меня есть из MiniScalope ответа выше. Я использую VS2010 и ASP.Net MVC 2 Просмотр

 public static string ImageLink(this HtmlHelper htmlHelper, string imgSrc, string alt, string actionName, string controllerName, object routeValues, object htmlAttributes, object imgHtmlAttributes) 
    { 
     UrlHelper urlHelper = ((Controller)htmlHelper.ViewContext.Controller).Url; 
     TagBuilder imgTag = new TagBuilder("img"); 
     imgTag.MergeAttribute("src", imgSrc); 
     imgTag.MergeAttributes((IDictionary<string, string>) imgHtmlAttributes,true); 
     string url = urlHelper.Action(actionName, controllerName, routeValues); 



     TagBuilder imglink = new TagBuilder("a"); 
     imglink.MergeAttribute("href", url); 
     imglink.InnerHtml = imgTag.ToString(); 
     imglink.MergeAttributes((IDictionary<string, string>)htmlAttributes, true); 

     return imglink.ToString(); 

    } 
2

этот код был протестирован на mvc4 ...

public static MvcHtmlString ImageLink(this HtmlHelper htmlHelper, string imgSrc, string alt, string actionName, string controllerName, object routeValues, object htmlAttributes, object imgHtmlAttributes) 
    { 
     UrlHelper urlHelper = ((Controller)htmlHelper.ViewContext.Controller).Url; 
     var imgTag = new TagBuilder("img"); 
     imgTag.MergeAttribute("src", imgSrc); 
     imgTag.MergeAttributes((IDictionary<string, string>)imgHtmlAttributes, true); 
     string url = urlHelper.Action(actionName, controllerName, routeValues); 



     var imglink = new TagBuilder("a"); 
     imglink.MergeAttribute("href", url); 
     imglink.InnerHtml = imgTag.ToString(); 
     imglink.MergeAttributes((IDictionary<string, string>)htmlAttributes, true); 

     return MvcHtmlString.Create(imglink.ToString()); 

    } 
Смежные вопросы