Jaki jest najlepszy sposób na zastąpienie linków obrazami przy użyciu Razor w MVC3. Po prostu robię to w tej chwili:
<a href="@Url.Action("Edit", new { id=MyId })"><img src="../../Content/Images/Image.bmp", alt="Edit" /></a>
Czy jest lepszy sposób?
image
asp.net-mvc-3
action
razor
davy
źródło
źródło
~/Content
). Ścieżka../../Content
nie może być ważne z różnymi drogami (np/
,/Home
,/Home/Index
).Odpowiedzi:
Możesz utworzyć metodę rozszerzenia dla HtmlHelper, aby uprościć kod w pliku CSHTML. Możesz zamienić tagi na taką metodę:
Oto przykładowa metoda rozszerzenia powyższego kodu:
źródło
routeValues
na,ActionResult
a następnieurl.Action
zmienić funkcjęrouteValues
narouteValues.GetRouteValueDictionary()
/configuration/system.web/pages/namespaces
elemencie.alt
akceptuję 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());}
/Views
folder najwyższego poziomuMożesz użyć,
Url.Content
który działa dla wszystkich linków, ponieważ tłumaczy tyldę~
na główny URI.źródło
<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.
źródło
Cóż, możesz użyć rozwiązania @Lucas, ale jest też inny sposób.
Teraz dodaj tę klasę do pliku CSS lub na swojej stronie:
W przypadku tej klasy każdy link będzie zawierał pożądany obraz.
źródło
ControllerName
swojej akcji. W ten sposób:@Html.ActionLink("Update", "Update", "*Your Controller*",*object values*, new {@class = "imgLink"})
Okazało się, że był to bardzo przydatny wątek.
Dla tych, którzy są uczuleni na aparat ortodontyczny, oto odpowiedzi Lucasa i Crake'a w wersji VB.NET:
źródło
Ta metoda rozszerzenia również działa (do umieszczenia w publicznej klasie statycznej):
źródło
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.
źródło
modyfikacja slajdu zmieniona Pomocnik
Klasa CSS
Utwórz łącze, po prostu podaj nazwę klasy
źródło
Dołączyłem do odpowiedzi od Lucasa i „ Pomocnicy ASP.NET MVC, łączenie dwóch obiektów htmlAttributes razem ” i plus nazwa kontrolera do następującego kodu:
// Przykładowe użycie w CSHTML
Oraz klasa rozszerzenia dla powyższego kodu:
źródło
To by działało bardzo dobrze
źródło