Эквивалент изображения ActionLink в ASP.NET MVC - PullRequest
47 голосов
/ 17 октября 2008

В ASP.NET MVC есть эквивалент помощника Html.ActionLink для тегов Img?

У меня есть действие контроллера, которое выводит динамически сгенерированный JPEG, и я хотел использовать те же лямбда-выражения для ссылки на него, как и для HREF с использованием ActionLink.

В качестве альтернативы, помощник, который просто дает URL-адрес для маршрута (снова заданный с помощью Lambdas) также будет приемлемым.

EDIT : Первоначально я указывал, что использую Preview 5, однако я вижу, что бета-версия была выпущена. Таким образом, в целом номер версии был ненужной информацией, так как я скоро буду обновляться: -)

Ответы [ 14 ]

1 голос
/ 17 июня 2009

Является ли Url.Content () тем, что вы ищете?

Дайте ему что-то вроде Url.Content ("~ / path / to / something.jpg"), и он превратит его в соответствующий путь на основе корня приложения.

-Josh

0 голосов
/ 10 октября 2013

Хорошие решения здесь, но что если вы хотите иметь больше, чем просто изображение в actionlink? Вот как я это делаю:

     @using (Html.BeginForm("Action", "Controler", ajaxOptions))
     { 
        <button type="submit">
           <img src="image.png" />            
        </button>
     }

Недостаток в том, что мне все еще нужно немного стилизовать элемент button, но вы можете поместить туда все нужные вам html.

И это работает с помощником Ajax: https://stackoverflow.com/a/19302438/961139

0 голосов
/ 17 июля 2012

Добавление к другим постам: в моем случае (asp.net mvc 3) я хотел, чтобы ссылка на изображение действовала как селектор языка, поэтому я получил:

  public static MvcHtmlString ImageLink(this HtmlHelper htmlHelper, string imgSrc, string cultureName, object htmlAttributes, object imgHtmlAttributes, string languageRouteName = "lang", bool strictSelected = false)
        {
           UrlHelper urlHelper = ((Controller)htmlHelper.ViewContext.Controller).Url;
           TagBuilder imgTag = new TagBuilder("img");
           imgTag.MergeAttribute("src", imgSrc);
           imgTag.MergeAttributes((IDictionary<string, string>)imgHtmlAttributes, true);

           var language = htmlHelper.LanguageUrl(cultureName, languageRouteName, strictSelected);                      
           string url = language.Url;

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

           //if the current page already contains the language parameter make sure the corresponding html element is marked
           string currentLanguage = htmlHelper.ViewContext.RouteData.GetRequiredString("lang");
           if (cultureName.Equals(currentLanguage, StringComparison.InvariantCultureIgnoreCase))
           {
              imglink.AddCssClass("selectedLanguage");
           }
           return new MvcHtmlString(imglink.ToString());
        }

Поддержка интернализации была осуществлена ​​через языковой маршрут - первоисточник здесь .

0 голосов
/ 08 января 2011

Я попытался поместить вывод Html.Image в мой Html.ImageLink помощник.

@(new HtmlString(Html.ActionLink(Html.Image("image.gif").ToString(), "myAction", "MyController").ToString().Replace("&lt;", "<").Replace("&gt;", ">")))

Проблема для меня в том, что имя ActionLink закодировано, поэтому у меня есть & lt вместо <. </p>

Я только что удалил эту кодировку, и результат работает для меня. (Есть ли лучший способ сделать это вместо использования замены?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...