ASP.NET Core'da Tutturucu Etiketi Yardımcısı
Peter Kellner ve Scott Addie tarafından
Tutturucu Etiketi Yardımcısı, yeni öznitelikler ekleyerek standart HTML tutturucu (<a ... ></a>
) etiketini geliştirir. Kurala göre, öznitelik adları ön ekini alır asp-
. İşlenen yer işareti öğesinin href
öznitelik değeri özniteliklerin değerleri asp-
tarafından belirlenir.
Etiket Yardımcıları'nın genel bakışı için bkz. ASP.NET Core'da Etiket Yardımcıları.
Örnek kodu görüntüleme veya indirme (indirme)
SpeakerController bu belgenin genelindeki örneklerde kullanılır:
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System.Linq;
public class SpeakerController : Controller
{
private List<Speaker> Speakers =
new List<Speaker>
{
new Speaker {SpeakerId = 10},
new Speaker {SpeakerId = 11},
new Speaker {SpeakerId = 12}
};
[Route("Speaker/{id:int}")]
public IActionResult Detail(int id) =>
View(Speakers.FirstOrDefault(a => a.SpeakerId == id));
[Route("/Speaker/Evaluations",
Name = "speakerevals")]
public IActionResult Evaluations() => View();
[Route("/Speaker/EvaluationsCurrent",
Name = "speakerevalscurrent")]
public IActionResult Evaluations(
int speakerId,
bool currentYear) => View();
public IActionResult Index() => View(Speakers);
}
public class Speaker
{
public int SpeakerId { get; set; }
}
Tutturucu Etiketi Yardımcısı öznitelikleri
asp-controller
asp-controller özniteliği, URL'yi oluşturmak için kullanılan denetleyiciyi atar. Aşağıdaki işaretleme tüm konuşmacıları listeler:
<a asp-controller="Speaker"
asp-action="Index">All Speakers</a>
Oluşturulan HTML:
<a href="/Speaker">All Speakers</a>
asp-controller
Öznitelik belirtilirse ve asp-action
belirtilmezse, varsayılan asp-action
değer şu anda yürütülen görünümle ilişkili denetleyici eylemidir. Önceki işaretlemeden atlanırsa ve Bağlayıcı Etiketi Yardımcısı Denetleyicinin Dizin görünümünde (/Home) kullanılırsaHomeasp-action
, oluşturulan HTML şu şekildedir:
<a href="/Home">All Speakers</a>
asp-action
asp-action öznitelik değeri, oluşturulan href
öznitelikte yer alan denetleyici eylem adını temsil eder. Aşağıdaki işaretleme, oluşturulan href
öznitelik değerini konuşmacı değerlendirmeleri sayfasına ayarlar:
<a asp-controller="Speaker"
asp-action="Evaluations">Speaker Evaluations</a>
Oluşturulan HTML:
<a href="/Speaker/Evaluations">Speaker Evaluations</a>
asp-controller
Öznitelik belirtilmezse, geçerli görünümü yürüten görünümü çağıran varsayılan denetleyici kullanılır.
asp-action
Öznitelik değeri ise Index
URL'ye hiçbir eylem eklenmez ve varsayılan Index
eylemin çağrılması sağlanır. Belirtilen (veya varsayılan) eylem, içinde başvurulan denetleyicide asp-controller
bulunmalıdır.
asp-route-{value}
asp-route-{value} özniteliği joker yol ön ekini etkinleştirir. Yer tutucuyu {value}
kaplayan tüm değerler olası bir yol parametresi olarak yorumlanır. Varsayılan yol bulunamazsa, bu yol ön eki oluşturulan href
özniteliğin sonuna istek parametresi ve değeri olarak eklenir. Aksi takdirde, yol şablonunda değiştirilir.
Aşağıdaki denetleyici eylemini göz önünde bulundurun:
private List<Speaker> Speakers =
new List<Speaker>
{
new Speaker {SpeakerId = 10},
new Speaker {SpeakerId = 11},
new Speaker {SpeakerId = 12}
};
[Route("Speaker/{id:int}")]
public IActionResult Detail(int id) =>
View(Speakers.FirstOrDefault(a => a.SpeakerId == id));
Startup.Configure içinde tanımlanan varsayılan yol şablonuyla:
app.UseMvc(routes =>
{
// need route and attribute on controller: [Area("Blogs")]
routes.MapRoute(name: "mvcAreaRoute",
template: "{area:exists}/{controller=Home}/{action=Index}");
// default route for non-areas
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
MVC görünümü, eylem tarafından sağlanan modeli aşağıdaki gibi kullanır:
@model Speaker
<!DOCTYPE html>
<html>
<body>
<a asp-controller="Speaker"
asp-action="Detail"
asp-route-id="@Model.SpeakerId">SpeakerId: @Model.SpeakerId</a>
</body>
</html>
Varsayılan yolun {id?}
yer tutucusu eşleştirildi. Oluşturulan HTML:
<a href="/Speaker/Detail/12">SpeakerId: 12</a>
Yol ön ekinin, aşağıdaki MVC görünümünde olduğu gibi eşleşen yönlendirme şablonunun bir parçası olmadığını varsayalım:
@model Speaker
<!DOCTYPE html>
<html>
<body>
<a asp-controller="Speaker"
asp-action="Detail"
asp-route-speakerid="@Model.SpeakerId">SpeakerId: @Model.SpeakerId</a>
<body>
</html>
Eşleşen yolda bulunamadığından speakerid
aşağıdaki HTML oluşturulur:
<a href="/Speaker/Detail?speakerid=12">SpeakerId: 12</a>
asp-controller
asp-action
Veya belirtilmemişse, özniteliğindekiyle aynı varsayılan işleme izleniyor asp-route
demektir.
asp-route
asp-route özniteliği, doğrudan adlandırılmış bir yola bağlanan bir URL oluşturmak için kullanılır. Yönlendirme öznitelikleri kullanılarak, bir yol içinde SpeakerController
gösterildiği gibi adlandırılabilir ve eyleminde Evaluations
kullanılabilir:
[Route("/Speaker/Evaluations",
Name = "speakerevals")]
Aşağıdaki işaretlemede asp-route
özniteliği adlandırılmış yola başvurur:
<a asp-route="speakerevals">Speaker Evaluations</a>
Tutturucu Etiketi Yardımcısı , URL /Konuşmacı/Değerlendirmeler'i kullanarak doğrudan bu denetleyici eylemine bir yol oluşturur. Oluşturulan HTML:
<a href="/Speaker/Evaluations">Speaker Evaluations</a>
veya asp-action
ek olarak asp-route
belirtilirseasp-controller
, oluşturulan yol beklediğiniz gibi olmayabilir. Yol çakışmasını asp-route
önlemek için ve asp-action
öznitelikleriyle asp-controller
kullanılmamalıdır.
asp-all-route-data
asp-all-route-data özniteliği, anahtar-değer çiftleri sözlüğü oluşturulmasını destekler. Anahtar parametre adı, değer ise parametre değeridir.
Aşağıdaki örnekte, bir sözlük başlatılır ve bir Razor görünüme geçirilir. Alternatif olarak, veriler modelinizle birlikte geçirilebilir.
@{
var parms = new Dictionary<string, string>
{
{ "speakerId", "11" },
{ "currentYear", "true" }
};
}
<a asp-route="speakerevalscurrent"
asp-all-route-data="parms">Speaker Evaluations</a>
Yukarıdaki kod aşağıdaki HTML'yi oluşturur:
<a href="/Speaker/EvaluationsCurrent?speakerId=11¤tYear=true">Speaker Evaluations</a>
asp-all-route-data
Sözlük, aşırı yüklenmiş eylemin gereksinimlerini karşılayan bir sorgu dizesi oluşturmak için düzleştirilmiştirEvaluations
:
public IActionResult Evaluations() => View();
[Route("/Speaker/EvaluationsCurrent",
Name = "speakerevalscurrent")]
public IActionResult Evaluations(
Sözlükteki anahtarlardan herhangi biri yol parametreleriyle eşleşiyorsa, bu değerler rotada uygun şekilde değiştirilir. Diğer eşleşmeyen değerler istek parametreleri olarak oluşturulur.
asp-fragment
asp-fragment özniteliği, URL'ye eklenecek bir URL parçası tanımlar. Tutturucu Etiketi Yardımcısı karma karakteri (#) ekler. Aşağıdaki işaretlemeyi göz önünde bulundurun:
<a asp-controller="Speaker"
asp-action="Evaluations"
asp-fragment="SpeakerEvaluations">Speaker Evaluations</a>
Oluşturulan HTML:
<a href="/Speaker/Evaluations#SpeakerEvaluations">Speaker Evaluations</a>
Karma etiketleri, istemci tarafı uygulamaları oluştururken yararlıdır. Örneğin, JavaScript'te kolay işaretleme ve arama için kullanılabilirler.
asp-area
asp-area özniteliği, uygun yolu ayarlamak için kullanılan alan adını ayarlar. Aşağıdaki örneklerde özniteliğin yolları yeniden asp-area
eşlemeye nasıl neden olduğu gösterilir.
Sayfalarda Razor Kullanım
Razor Sayfa alanları ASP.NET Core 2.1 veya sonraki sürümlerde desteklenir.
Aşağıdaki dizin hiyerarşisini göz önünde bulundurun:
- {Proje adı}
- wwwroot
- Alanlar
- Oturumlar
- Sayfalar
- _ViewStart.cshtml
Index.cshtml
Index.cshtml.cs
- Sayfalar
- Oturumlar
- Sayfalar
Oturumlar alanı DizinRazor Sayfasına başvurmak için işaretleme şu şekildedir:
<a asp-area="Sessions"
asp-page="/Index">View Sessions</a>
Oluşturulan HTML:
<a href="/Sessions">View Sessions</a>
İpucu
Sayfalar uygulamasındaki Razor alanları desteklemek için içinde aşağıdakilerden Startup.ConfigureServices
birini yapın:
Uyumluluk sürümünü 2.1 veya üzeri olarak ayarlayın.
özelliğini olarak RazorPagesOptions.AllowAreas
true
ayarlayın:services.AddMvc() .AddRazorPagesOptions(options => options.AllowAreas = true);
MVC'de kullanım
Aşağıdaki dizin hiyerarşisini göz önünde bulundurun:
- {Proje adı}
- wwwroot
- Alanlar
- Bloglar
- Denetleyiciler
HomeController.cs
- Görünümler
- Home
AboutBlog.cshtml
Index.cshtml
- _ViewStart.cshtml
- Home
- Denetleyiciler
- Bloglar
- Denetleyiciler
"Bloglar" ayarı asp-area
, Bu bağlayıcı etiketi için ilişkili denetleyicilerin ve görünümlerin yollarına Areas/Blogs dizinine ön ek ekler. AboutBlog görünümüne başvurmak için işaretleme şu şekildedir:
<a asp-area="Blogs"
asp-controller="Home"
asp-action="AboutBlog">About Blog</a>
Oluşturulan HTML:
<a href="/Blogs/Home/AboutBlog">About Blog</a>
İpucu
MVC uygulamasındaki alanları desteklemek için, yol şablonu varsa alana bir başvuru içermelidir. Bu şablon Startup.Configure içindeki yöntem çağrısının routes.MapRoute
ikinci parametresiyle temsil edilir:
app.UseMvc(routes =>
{
// need route and attribute on controller: [Area("Blogs")]
routes.MapRoute(name: "mvcAreaRoute",
template: "{area:exists}/{controller=Home}/{action=Index}");
// default route for non-areas
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
asp-protocol
asp-protocol özniteliği, URL'nizde bir protokol (örneğinhttps
) belirtmek içindir. Örnek:
<a asp-protocol="https"
asp-controller="Home"
asp-action="About">About</a>
Oluşturulan HTML:
<a href="https://localhost/Home/About">About</a>
Örnekteki ana bilgisayar adı localhost şeklindedir. Tutturucu Etiketi Yardımcısı, URL'yi oluştururken web sitesinin genel etki alanını kullanır.
asp-host
asp-host özniteliği, URL'nizde bir ana bilgisayar adı belirtmek içindir. Örnek:
<a asp-protocol="https"
asp-host="microsoft.com"
asp-controller="Home"
asp-action="About">About</a>
Oluşturulan HTML:
<a href="https://microsoft.com/Home/About">About</a>
asp-page
asp-page özniteliği Pages ile birlikte Razor kullanılır. Yer işareti etiketinin href
öznitelik değerini belirli bir sayfaya ayarlamak için bunu kullanın. Sayfa adının önüne ek /
olarak, uygulamanın kökünden eşleşen bir sayfa için URL oluşturulur:
Örnek kodla, aşağıdaki işaretleme katılımcı Razor Sayfasına bir bağlantı oluşturur:
<a asp-page="/Attendee">All Attendees</a>
Oluşturulan HTML:
<a href="/Attendee">All Attendees</a>
asp-page
özniteliği , asp-controller
ve asp-action
öznitelikleriyle asp-route
birbirini dışlar. Ancak, asp-page
aşağıdaki işaretlemede gösterildiği gibi yönlendirmeyi denetlemek için ile asp-route-{value}
kullanılabilir:
<a asp-page="/Attendee"
asp-route-attendeeid="10">View Attendee</a>
Oluşturulan HTML:
<a href="/Attendee?attendeeid=10">View Attendee</a>
Başvuruda bulunulmuş sayfa yoksa, istekten bir ortam değeri kullanılarak geçerli sayfaya bağlantı oluşturulur. Hata ayıklama günlüğü düzeyi dışında hiçbir uyarı belirtilmemiştir.
asp-page-handler
asp-page-handler özniteliği Pages ile Razor birlikte kullanılır. Belirli sayfa işleyicilerine bağlanmaya yöneliktir.
Aşağıdaki sayfa işleyicisini göz önünde bulundurun:
public void OnGetProfile(int attendeeId)
{
ViewData["AttendeeId"] = attendeeId;
// code omitted for brevity
}
Sayfa modelinin ilişkili işaretlemesi, sayfa işleyicisine OnGetProfile
bağlanır. On<Verb>
Sayfa işleyicisi yöntem adının ön ekinin öznitelik değerinde atlandığından asp-page-handler
eminin. Yöntem zaman uyumsuz olduğunda, Async
sonek de atlanır.
<a asp-page="/Attendee"
asp-page-handler="Profile"
asp-route-attendeeid="12">Attendee Profile</a>
Oluşturulan HTML:
<a href="/Attendee?attendeeid=12&handler=Profile">Attendee Profile</a>