ASP.NET Core'da Tutturucu Etiketi Yardımcısı
Tarafından Peter Kellner ve Scott Addie
Bağlayıcı Etiketi Yardımcısı, yeni öznitelikler ekleyerek standart HTML tutturucu (<a ... ></a>
) etiketini geliştirir. Kurala göre, öznitelik adları ön ekinde asp-
bulunur. İşlenen tutturucu öğesinin href
öznitelik değeri, özniteliklerin değerleri asp-
tarafından belirlenir.
Etiket Yardımcıları'na genel bakış için, bkz. ASP.NET Core'da Etiket Yardımcıları.
Örnek kodu görüntüleme veya indirme (indirme)
SpeakerController bu belgedeki ö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; }
}
Bağlayıcı 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ülmekte olan 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 şöyle olur:
<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, rota ş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 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
Belirtilmemiş veya asp-action
belirtilmemişse, özniteliğindekiyle aynı varsayılan işleme izlenirasp-route
.
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>
Bağlayıcı 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 asp-route
olarak 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şturmayı destekler. Anahtar parametre adıdır ve değer 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ş Evaluations
eylemin gereksinimlerini karşılayan bir sorgu dizesi oluşturmak için düzleştirilmiştir:
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 etiketler, istemci tarafı uygulamaları oluştururken kullanışlı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>
Bahşiş
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
, Areas/Blogs dizinine bu tutturucu etiketi için ilişkili denetleyicilerin ve görünümlerin yollarına ön ek ekler. AboutBlog görünümüne başvurmak için işaretleme:
<a asp-area="Blogs"
asp-controller="Home"
asp-action="AboutBlog">About Blog</a>
Oluşturulan HTML:
<a href="/Blogs/Home/AboutBlog">About Blog</a>
Bahşiş
MVC uygulamasındaki alanları desteklemek için yol şablonunun varsa alana bir başvuru içermesi gerekir. 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'tır. 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 konak 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. Bağlayıcı etiketinin href
öznitelik değerini belirli bir sayfaya ayarlamak için bunu kullanın. Ile sayfa adının ön ekini /
oluşturmak, uygulamanın kökünden eşleşen bir sayfanın URL'sini oluşturur:
Ö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şaretlemenin gösterdiği gibi yönlendirmeyi denetlemek için ile asp-route-{value}
birlikte 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 alınan bir ortam değeri kullanılarak geçerli sayfaya bir 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 birlikte Razor 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öntemi adının ön ekinin öznitelik değerinde atlandığından asp-page-handler
emin olun. 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>
Ek kaynaklar
ASP.NET Core