Nie jest to bezpośrednio związane, ale zdecydowanie sugeruję użycie plików PNG lub JPG (w zależności od zawartości obrazu) zamiast plików BMP. I jak zasugerował @jgauffin, spróbuj również użyć ścieżek względnych aplikacji ( ~/Content). Ścieżka ../../Contentnie może być ważne z różnymi drogami (np /, /Home, /Home/Index).
Doskonały fragment. Każdy, kto chce używać tego z T4MVC, musi po prostu zmienić typ routeValuesna, ActionResulta następnie url.Actionzmienić funkcję routeValuesnarouteValues.GetRouteValueDictionary()
@Kasper Skov: Umieść metodę w klasie statycznej, a następnie odwołaj się do przestrzeni nazw tej klasy w pliku Web.config w /configuration/system.web/pages/namespaceselemencie.
Fajnie !, zamiast tego altakceptuję obiekt do otrzymywania właściwości html za pomocą anonimowego obiektu, var attributes = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes);a na koniecforeach (var attr in attributes){ imgBuilder.MergeAttribute(attr.Key, attr.Value.ToString());}
Nie mogłem tego uruchomić, dopóki nie zdałem sobie sprawy, że ponieważ używam Obszarów, odniesienie do przestrzeni nazw klasy (jak wskazał Umar) musi zostać dodane do WSZYSTKICH plików web.config w folderze Widoki dla wszystkich obszarów, a także /Viewsfolder najwyższego poziomu
Jeśli potrzebujesz tego tylko na jednej stronie, zamiast zmieniać pliki Web.config, możesz dodać instrukcję @using w .cshtml i odwołać się do przestrzeni nazw
Działa to świetnie w MVC3. Dziękuję Ci! <a href="@Url.Action("Index","Home")"><img src="@Url.Content("~/Content/images/myimage.gif")" alt="Home" /></a>
Opierając się na powyższej odpowiedzi Lucasa, jest to przeciążenie, które przyjmuje nazwę kontrolera jako parametr, podobnie jak ActionLink. Użyj tego przeciążenia, gdy obraz łączy się z akcją w innym kontrolerze.
// Extension methodpublicstaticMvcHtmlStringActionImage(thisHtmlHelper html,string action,string controllerName,object routeValues,string imagePath,string alt){var url =newUrlHelper(html.ViewContext.RequestContext);// build the <img> tagvar imgBuilder =newTagBuilder("img");
imgBuilder.MergeAttribute("src", url.Content(imagePath));
imgBuilder.MergeAttribute("alt", alt);string imgHtml = imgBuilder.ToString(TagRenderMode.SelfClosing);// build the <a> tagvar anchorBuilder =newTagBuilder("a");
anchorBuilder.MergeAttribute("href", url.Action(action, controllerName, routeValues));
anchorBuilder.InnerHtml= imgHtml;// include the <img> tag insidestring anchorHtml = anchorBuilder.ToString(TagRenderMode.Normal);returnMvcHtmlString.Create(anchorHtml);}
@KasperSkov Zapomniałem o tym małym problemie. Z jakiegoś powodu to szczególne zastąpienie helpera actionLink nie działa z powyższym przykładem. Musisz do ControllerNameswojej akcji. W ten sposób:@Html.ActionLink("Update", "Update", "*Your Controller*",*object values*, new {@class = "imgLink"})
Dla tych, którzy są uczuleni na aparat ortodontyczny, oto odpowiedzi Lucasa i Crake'a w wersji VB.NET:
PublicModuleActionImage<System.Runtime.CompilerServices.Extension()>FunctionActionImage(html AsHtmlHelper,ActionAsString,RouteValuesAsObject,ImagePathAsString,AltTextAsString)AsMvcHtmlStringDim url =NewUrlHelper(html.ViewContext.RequestContext)Dim imgHtml AsString'Build the <img> tag
Dim imgBuilder =NewTagBuilder("img")With imgBuilder
.MergeAttribute("src", url.Content(ImagePath)).MergeAttribute("alt",AltText)
imgHtml =.ToString(TagRenderMode.Normal)EndWithDim aHtml AsString'Build the <a> tag
Dim aBuilder =NewTagBuilder("a")With aBuilder
.MergeAttribute("href", url.Action(Action,RouteValues)).InnerHtml= imgHtml 'Include the <img> tag inside
aHtml = aBuilder.ToString(TagRenderMode.Normal)EndWithReturnMvcHtmlString.Create(aHtml)EndFunction<Extension()>FunctionActionImage(html AsHtmlHelper,ActionAsString,ControllerAsString,RouteValuesAsObject,ImagePathAsString,AltTextAsString)AsMvcHtmlStringDim url =NewUrlHelper(html.ViewContext.RequestContext)Dim imgHtml AsString'Build the <img> tag
Dim imgBuilder =NewTagBuilder("img")With imgBuilder
.MergeAttribute("src", url.Content(ImagePath)).MergeAttribute("alt",AltText)
imgHtml =.ToString(TagRenderMode.Normal)EndWithDim aHtml AsString'Build the <a> tag
Dim aBuilder =NewTagBuilder("a")With aBuilder
.MergeAttribute("href", url.Action(Action,Controller,RouteValues)).InnerHtml= imgHtml 'Include the <img> tag inside
aHtml = aBuilder.ToString(TagRenderMode.Normal)EndWithReturnMvcHtmlString.Create(aHtml)EndFunctionEndModule
Aby dodać do całej niesamowitej pracy rozpoczętej przez Luke'a, publikuję jeszcze jedną, która przyjmuje wartość klasy css i traktuje class i alt jako parametry opcjonalne (ważne pod ASP.NET 3.5+). Zapewni to większą funkcjonalność, ale zmniejszy liczbę potrzebnych przeciążonych metod.
// Extension methodpublicstaticMvcHtmlStringActionImage(thisHtmlHelper html,string action,string controllerName,object routeValues,string imagePath,string alt =null,string cssClass =null){var url =newUrlHelper(html.ViewContext.RequestContext);// build the <img> tagvar imgBuilder =newTagBuilder("img");
imgBuilder.MergeAttribute("src", url.Content(imagePath));if(alt !=null)
imgBuilder.MergeAttribute("alt", alt);if(cssClass !=null)
imgBuilder.MergeAttribute("class", cssClass);string imgHtml = imgBuilder.ToString(TagRenderMode.SelfClosing);// build the <a> tagvar anchorBuilder =newTagBuilder("a");
anchorBuilder.MergeAttribute("href", url.Action(action, controllerName, routeValues));
anchorBuilder.InnerHtml= imgHtml;// include the <img> tag insidestring anchorHtml = anchorBuilder.ToString(TagRenderMode.Normal);returnMvcHtmlString.Create(anchorHtml);}
Ponadto, dla każdego nowego użytkownika MVC, pomocna wskazówka - wartość routeValue powinna mieć wartość @ RouteTable.Routes ["Home"] lub jakikolwiek identyfikator "trasy" znajduje się w RouteTable.
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.
~/Content
). Ścieżka../../Content
nie może być ważne z różnymi drogami (np/
,/Home
,/Home/Index
).