Was ist der beste Weg, um Links durch Bilder mit Razor in MVC3 zu ersetzen? Ich mache das im Moment einfach:
<a href="@Url.Action("Edit", new { id=MyId })"><img src="../../Content/Images/Image.bmp", alt="Edit" /></a>
Gibt es einen besseren Weg?
image
asp.net-mvc-3
action
razor
Davy
quelle
quelle
~/Content
) zu verwenden. Der Pfad../../Content
möglicherweise nicht gültig von verschiedenen Routen (zB/
,/Home
,/Home/Index
).Antworten:
Sie können eine Erweiterungsmethode für HtmlHelper erstellen, um den Code in Ihrer CSHTML-Datei zu vereinfachen. Sie können Ihre Tags durch eine Methode wie die folgende ersetzen:
Hier ist ein Beispiel für eine Erweiterungsmethode für den obigen Code:
quelle
routeValues
aufActionResult
und dann in derurl.Action
FunktionrouteValues
aufrouteValues.GetRouteValueDictionary()
/configuration/system.web/pages/namespaces
Element.alt
akzeptiere ich ein Objekt, um HTML-Eigenschaften mit einem anonymen Objekt dannvar attributes = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes);
und schließlich zu empfangenforeach (var attr in attributes){ imgBuilder.MergeAttribute(attr.Key, attr.Value.ToString());}
/Views
OrdnerSie können verwenden,
Url.Content
was für alle Links funktioniert, da es die Tilde~
in den Root-Uri übersetzt.quelle
<a href="@Url.Action("Index","Home")"><img src="@Url.Content("~/Content/images/myimage.gif")" alt="Home" /></a>
Aufbauend auf Lucas 'Antwort oben ist dies eine Überladung, bei der ein Controller-Name als Parameter verwendet wird, ähnlich wie bei ActionLink. Verwenden Sie diese Überladung, wenn Ihr Image mit einer Aktion in einem anderen Controller verknüpft ist.
quelle
Nun, Sie könnten die @ Lucas-Lösung verwenden, aber es gibt auch einen anderen Weg.
Fügen Sie diese Klasse nun in eine CSS-Datei oder auf Ihre Seite ein:
Mit dieser Klasse hat jeder Link Ihr gewünschtes Bild.
quelle
ControllerName
Ihrer Aktion. So:@Html.ActionLink("Update", "Update", "*Your Controller*",*object values*, new {@class = "imgLink"})
Dies stellte sich als sehr nützlicher Thread heraus.
Für diejenigen, die allergisch gegen geschweifte Zahnspangen sind, ist hier die VB.NET-Version der Antworten von Lucas und Crake:
quelle
Diese Erweiterungsmethode funktioniert auch (um in eine öffentliche statische Klasse eingefügt zu werden):
quelle
Um all die von Luke gestarteten Awesome-Arbeiten zu ergänzen, veröffentliche ich eine weitere, die einen CSS-Klassenwert verwendet und class und alt als optionale Parameter behandelt (gültig unter ASP.NET 3.5+). Dies ermöglicht mehr Funktionalität, reduziert jedoch die Anzahl der benötigten überladenen Methoden.
quelle
Folienänderung geändert Helper
CSS-Klasse
Erstellen Sie den Link, übergeben Sie einfach den Klassennamen
quelle
Ich habe die Antwort von Lucas und " ASP.NET MVC Helpers, Zusammenführen von zwei Objekt-HTML-Attributen zusammen " und plus controllerName mit folgendem Code verbunden:
// Beispielnutzung in CSHTML
Und die Erweiterungsklasse für den obigen Code:
quelle
Das würde sehr gut funktionieren
quelle