ساخت TAG Helper سفارشی در ASP.NET Core به ما این امکان را میدهد که کدهای HTML خود را ساختارمندتر، خواناتر و قابل استفاده مجدد کنید. این امر به بهبود نگهداری و توسعه پروژههای بزرگ کمک شایانی میکند و قابلیتهای سفارشیسازی زیادی را در اختیار ما قرار میدهد. در این آموزش که از سری آموزش های Asp.Net Core میباشد، به نحوه ساخت Custom Tag Helper میپردازیم.
ساخت Tag Helper سفارشی در ASP.NET Core چندین مزیت و کاربرد دارد که باعث میشود توسعهدهندگان به ایجاد آنها نیاز پیدا کنند. در زیر به برخی از این دلایل و مزایا اشاره شده است:
برای ساخت یک TagHelpers سفارشی ۴ مرحله زیر را انجام دهید
using Microsoft.AspNetCore.Razor.TagHelpers;
namespace CustomTagHelper.TagHelpers
{
public class EmailTagHelper:TagHelper
{
}
}
اگر از layout page استفاده میکنید باید به فایل ViewImports.cshtml موجود در فولدر Views بروید و آن را ثبت کنید.
@addTagHelper *, نام پروژه
در صورتی که از layout page استفاده نمیکنید. کد زیر را به بالای View خود اضافه کنید
@addTagHelper *, نام پروژه
namespace CustomTagHelper.TagHelpers
{
public class EmailTagHelper:TagHelper
{
public string EmailLink { get; set; } = "test@test.com";
public string EmailText { get; set; } = "Email";
public string EmailColor { get; set; } = "Green";
}
}
namespace CustomTagHelper.TagHelpers
{
public class EmailTagHelper:TagHelper
{
public string EmailLink { get; set; } = "test@test.com";
public string EmailText { get; set; } = "Email";
public string EmailColor { get; set; } = "Green";
public override void Process(TagHelperContext context, TagHelperOutput output)
{
}
}
}
output.TagName = "a";
output.Attributes.SetAttribute("href",$"mailto:{EmailLink}");
output.Attributes.SetAttribute("style",$"color:{EmailColor}");
output.Content.SetContent(EmailText);
public class EmailTagHelper:TagHelper
{
public string EmailLink { get; set; } = "test@test.com";
public string EmailText { get; set; } = "Email";
public string EmailColor { get; set; } = "Green";
public override void Process(TagHelperContext context, TagHelperOutput output)
{
output.TagName = "a";
output.Attributes.SetAttribute("href",$"mailto:{EmailLink}");
output.Attributes.SetAttribute("style",$"color:{EmailColor}");
output.Content.SetContent(EmailText);
}
}
<email email-color="red" email-link="ahadian2@gmail.com" email-text="Email"></email>
// تغییر نام تگ به "button"
output.TagName = "button";
//دسترسی به اتربیوت های موجود
var classAttribute = output.Attributes["class"];
//افزودن اتربیوت
output.Attributes.SetAttribute("class", "btn btn-primary");
//تغییر اتربیوت
output.Attributes.SetAttribute("class", "btn btn-primary");
//حذف اتربیوت
output.Attributes.RemoveAll("class");
//خواندن محتوای داخلی
var content = output.Content.GetContent();
//تنظیم محتوای داخلی
output.Content.SetContent("New content");
//تنظیم محتوای داخلی
output.Content.SetHtmlContent("<div>New content</div>");
//میتوانید محتوای جدیدی به محتوای موجود اضافه کنید
output.Content.Append("Additional content");
//میتوانید محتوای جدیدی به محتوای موجود اضافه کنید
output.Content.AppendHtml("<div>Additional content</div>");
//محتوای اچ تی ام ال را قبل و بعد از تگ اصلی تنظیم میکند
output.PreElement.SetHtmlContent("<div class='pre-element'>");
output.PostElement.SetHtmlContent("</div>");
متدهای AppendHtml و PrependHtml در PreElement و PostElement به شما این امکان را میدهند که محتوای HTML را قبل یا بعد از محتوای موجود اضافه کنید.
//این متد محتوای اچ تی ام ال جدید را به انتهای محتوای موجود اضافه میکند
output.PreElement.AppendHtml("<span>Additional pre content</span>");
output.PostElement.AppendHtml("<span>Additional post content</span>");
//این متد محتوای اچ تی ام ال جدید را به ابتدای محتوای موجود اضافه میکند
output.PreElement.PrependHtml("<span>Additional pre content</span>");
output.PostElement.PrependHtml("<span>Additional post content</span>");
//محتوا را قبل و بعد از محتوای داخلی تگ اصلی تنظیم میکند
output.PreContent.SetHtmlContent("<div class='pre-content'>");
output.PostContent.SetHtmlContent("</div>");
متد AppendHtml و PrependHtml در PreContent و متد PostContent به شما این امکان را میدهند که محتوای HTML را قبل یا بعد از محتوای موجود اضافه کنید.
//این متد محتوای اچ تی ام ال را به انتهای محتوای موجود اضافه میکند
output.PreContent.AppendHtml("<span>Additional</span>");
output.PostContent.AppendHtml("<span>Additional </span>");
//این متد محتوای اچ تی ام ال را به ابتدای محتوای موجود اضافه میکند
output.PreContent.PrependHtml("<span>Additional</span>");
output.PostContent.PrependHtml("<span>Additional</span>");
output.SuppressOutput();