Apa cara terbaik untuk mengganti tautan dengan gambar menggunakan Razor di MVC3. Saya hanya melakukan ini saat ini:
<a href="@Url.Action("Edit", new { id=MyId })"><img src="../../Content/Images/Image.bmp", alt="Edit" /></a>
Apakah ada cara yang lebih baik?
image
asp.net-mvc-3
action
razor
davy
sumber
sumber
~/Content
). Jalur../../Content
mungkin tidak valid dari rute yang berbeda (mis/
./Home
,/Home/Index
).Jawaban:
Anda dapat membuat metode ekstensi untuk HtmlHelper untuk menyederhanakan kode dalam file CSHTML Anda. Anda dapat mengganti tag Anda dengan metode seperti ini:
Berikut ini contoh metode ekstensi untuk kode di atas:
sumber
routeValues
menjadiActionResult
dan kemudianurl.Action
fungsi berubahrouteValues
menjadirouteValues.GetRouteValueDictionary()
/configuration/system.web/pages/namespaces
elemen tersebut.alt
, saya menerima objek untuk menerima properti html menggunakan objek anonim kemudianvar attributes = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes);
dan akhirnyaforeach (var attr in attributes){ imgBuilder.MergeAttribute(attr.Key, attr.Value.ToString());}
/Views
folder tingkat atasAnda dapat menggunakan
Url.Content
yang berfungsi untuk semua tautan karena itu menerjemahkan tilde~
ke uri root.sumber
<a href="@Url.Action("Index","Home")"><img src="@Url.Content("~/Content/images/myimage.gif")" alt="Home" /></a>
Berdasarkan jawaban Lucas di atas, ini adalah kelebihan beban yang menggunakan nama pengontrol sebagai parameter, mirip dengan ActionLink. Gunakan kelebihan beban ini saat gambar Anda ditautkan ke Tindakan di pengontrol yang berbeda.
sumber
Nah, Anda bisa menggunakan solusi @Lucas, tetapi ada juga cara lain.
Sekarang, tambahkan kelas ini pada file CSS atau di halaman Anda:
Dengan kelas itu, tautan apa pun akan memiliki gambar yang Anda inginkan.
sumber
ControllerName
tindakan Anda. Seperti ini:@Html.ActionLink("Update", "Update", "*Your Controller*",*object values*, new {@class = "imgLink"})
Ini ternyata utas yang sangat berguna.
Bagi mereka yang alergi terhadap kawat gigi keriting, berikut adalah jawaban Lucas dan Crake versi VB.NET:
sumber
Metode ekstensi ini juga berfungsi (untuk ditempatkan di kelas statis publik):
sumber
Untuk menambah semua pekerjaan Mengagumkan yang dimulai oleh Luke, saya memposting satu lagi yang mengambil nilai kelas css dan memperlakukan kelas dan alt sebagai parameter opsional (valid di bawah ASP.NET 3.5+). Ini akan memungkinkan lebih banyak fungsionalitas tetapi mengurangi jumlah metode kelebihan beban yang diperlukan.
sumber
modifikasi slide mengubah Helper
Kelas CSS
Buat tautan, cukup berikan nama kelas
sumber
Saya telah bergabung dengan jawaban dari Lucas dan " ASP.NET MVC Helpers, Menggabungkan dua objek htmlAttributes bersama-sama " dan ditambah controllerName ke kode berikut:
// Contoh penggunaan dalam CSHTML
Dan kelas ekstensi untuk kode di atas:
sumber
Ini akan bekerja dengan sangat baik
sumber