מבוא ל- Custom Tag Helpers ב-ASP.NET MVC

יישומי אינטרנט מודרניים דורשים קוד ראייה נקי, אמין, וניתן לערעור מחדש.ASP.NET Core MVC מספק עוזרי תג כמנגנון רב עוצמה של שרת-צד השרת כדי להפוך וליצור סימון HTML ישירות בתוך תצוגות Razor. בעוד האוניות המסגרת עם קבוצה עשירה של עוזרים בעלי תגים מובנה עבור טפסים, אימות, קידוד, ופרויקטים ספציפיים לסביבה, פרויקטים אמיתיים לעתים קרובות דורשים רכיבים מותאמים כי encapspertexatings-codes, ומאפשרים תכונות תמיכה אישית, המאפשרים, ותבניות תמיכה אופטית זיהוי, תכונות מתקדמות, המאפשרות, תכונות מתקדמות, תכונות מתקדמות, תכונות מצגות, ו-xatexatexatexatecastatives.

על ידי העברת דור HTML מורכב ולוגיקה מותנית בכיתות עוזרות לתייג, אתה מפריד חששות מצגת מסימון תצוגה, שיפור יכולת הבדיקה, ולהפחית את השכפול על פני בסיסים גדולים. מאמר זה מספק מדריך מקיף לבניית עוזרים תג מותאם אישית ב ASP.NET Core MVC, המכסה את הכל ממבנה המעמדי הבסיסי ותכונה מחייבת תרחישים מתקדמים כגון הזרקת תלות, עיבוד סינכרוני, ותגי עזר כולל דוגמאות עבודה מעשיות כדי לשלב את שיטות העבודה הטובות ביותר שלך לתוך שיטות עבודה יומיומיות.

מידע על עוזרי ASP.NET Core

עוזרי טאג הם מרכיבים של שרת המשתתפים בקביעת רכיבי HTML בתצוגות Razor.הם מאפשרים לך לצרף קוד C# לאלמנטים ספציפיים של HTML או שמות אלמנט מותאם אישית, מה שהופך את הסימון לפני שהוא נשלח ללקוח.בניגוד לתומכי HTML (שמשתמשים בשיטה כמו FLT:0), עוזרי תג פועלים על ידי התאמה נגד syn HTML קיים, מה שהופך את המראות להרגיש טבעיים יותר עבור מעצבים ומפתחים הקדמיים.

לדוגמה, עוזרי תג מובנה (FLT:1) מתמזגים את הבקר ואת תכונות הפעולה לתוך כתובת ה-URL הנכונה.T עוזרים לשנות תכונות, להחליף את כל האלמנט, להוסיף או להסיר את שיעורי ה-CSS, ואפילו להזריק HTML נוסף.הם לרוץ במהלך צינור ביצוע רזטור ויש להם גישה מלאה להקשר הבקשה הנוכחי, נתונים מודל ושירותים רשומים.

מודל הוצאה לאור Server-Side Execution Model

כאשר השקפה של רזאור מתפרסמת, עוזרי תג מתגלים באמצעות אסיפות ו-FLT:2 הנחיות.המסגרת מעריכה כל רכיב HTML נגד כל עוזרי תג רשומים, תוך שהם מעוררים את ה-FLT 3 או FLT:4 שיטות כאשר משחק נמצא.זה קורה לפני הפלט הסופי של HTML נוצר, ומאפשרת לתייגים להעשיר או להחליף אלמנטים דינמיים.

הבדלים מרכזיים מכלי תצוגה אחרים

  • (FLT:0 HTML Helpers: FLT:1) נדרשת שיטה C# הנקראת בתוך בלוקים רזאור (ראה FLT:5), אשר יכול לשבור את זרימת ה-HTML-centric.
  • (FLT:0Partials: FLT:1) טוב לשימוש מחדש של נתחים סטטיים של סימון, אך חסר יכולת לשנות את המבנה באופן ריאליסטי בהתבסס על לוגיקה בצד השרת ללא מודלים נוספים.
  • (ב) ⁇ :0) ⁇ ⁇ (ב) ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇

למה ליצור עוזרי פרופיל?

בעוד עוזרי תג בנוי לכסות תרחישים נפוצים רבים, עוזרי תג מותאם אישית מספקים יתרונות ייחודיים כי באופן ישיר לשפר את איכות הקוד ואת הפרודוקטיביות של מפתח.

  • (FLT:0) Encapsulate Complex Markup PatternsveFLT:1) - חזור על רתיחה HTML (כגון רכיבי כרטיס מובנים, טבלאות נתונים או כפתורים מעוצבים) ניתן לחדור לתוך אלמנט מותאם אישית יחיד.
  • (ב) [ה]הכוח של עיצוב כוח רצון קונסורציונאלי: [ה] מנהג (FLT:7 או FLT:8 עוזר תגי תג יכול לאכוף את שיעורי ה- CSS עקביים, תכונות נגישות ודפוסי איסוף נתונים, הפחתת הסיכוי של חוסר עקביות UI.
  • (ב) ,0) ראה את יכולת הקריאה של ההרחבה 1 (במקום פילטר 9) ו בלוקים של C# מותנים, תג יחיד עם כמה תכונות הוא הרבה יותר קל לסרוק ולתחזק.
  • (FLT:0) בחינת יחידת תצוגה של לוגיקה לוגיקה (ראה לוגיקה) 1 (מכיוון שתומכי תג הם כיתות פשוטות המייצרות HTML, באפשרותך לכתוב בדיקות יחידה כדי לאמת את התפוקה הנבנית עבור קלטות שונות, משהו קשה להשיג עם קוד רייזר קו.
  • (FLT:0) הגדלת יכולתה של פרויקטים ב- ProjectcioFLT:1) - ספריית עוזרי תג מותאם אישית ניתן לארוז כמרכיב NuGet ולחלוק על פני פתרונות מרובים, קידום ערכת כלי עקבי UI.

יצירת פרופיל מקורי בסיסי Helper

כל מי שכותב את ה-FLT:10 (או יישום) הוא בעל כורסאות (או ייעודו של ה-FLT:11 ישירות) והוא מעוטר ב-FLT:12 מייחסים את יסוד ה-HTML או לייחסו את מטרותיו.

שלב 1: Define the Tag Helper Class

יצירת מחלקה חדשה של C# בפרויקט שלך, בדרך כלל בתוך תיקיה של AFLT:15. inherit from the FLT:16 וליישם את התכונה של FLT:17 עם שם האלמנט שאתה מתכוון להשתמש בנוף שלך.

[HtmlTargetElement("custom-card")]
public class CustomCardTagHelper : TagHelper
{
 public string Title { get; set; }
 public string CssClass { get; set; } = "card-default";

 public override void Process(TagHelperContext context, TagHelperOutput output)
 {
 // Replace the custom tag with a div and add the desired structure
 output.TagName = "div";
 output.Attributes.SetAttribute("class", $"card {CssClass}");

 // Build inner content
 output.Content.SetHtmlContent(
 $@"<div class=""card-header"">{Title}</div>
 <div class=""card-body"">
 {output.Content.GetContent()}
 </div>"
 );
 }
}

שלב 2: הבנת TagHelperContext ו-TaHelperOutput

(ב) , ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇

שלב 3: לרשום את ה-Ta Helper

עוזרי טאג מגלים באופן אוטומטי אם הם באותה האסיפה כמו היישום, אם עוזרי תג שלך מתגוררים בספריה נפרדת בכיתה, עליך להוסיף הוראות 24:24 ב-FLT:25:

@addTagHelper *, MyApp.TagHelpers

(ב) ,ב[[1924]], [[1924]], [[1924]]]], [[1924]]]], [[1924]]]]]], [[1924]]]]]]]], [[1924]]]]]]]], [[1924]]]]]]]], [[1924]]]]]]]]]]

שלב 4: השתמש ב-Ta Helper בתצוגת Razor

עם הרישום במקום, אתה יכול להשתמש בגורם מותאם אישית:

<custom-card title="Welcome" css-class="card-primary">
 This is the body content
</custom-card>

זה יוצר:

<div class="card card-primary">
 <div class="card-header">Welcome</div>
 <div class="card-body">
 This is the body content
 </div>
</div>

טכניקות עזרה של Tag Helper

שימוש ב- Attributes ו-נכסים Binding

עוזרי תג מותאם אישית יכולים לקבל תכונות מרובות, כולל סוגים מורכבים וביטויי מודל.לדוגמה, עוזר תג שהופך קלט טופס יכול לקשור נכס לביטוי מודל:

[HtmlTargetElement("email-input")]
public class EmailInputTagHelper : TagHelper
{
 [HtmlAttributeName("asp-for")]
 public ModelExpression For { get; set; }

 public override void Process(TagHelperContext context, TagHelperOutput output)
 {
 output.TagName = "input";
 output.Attributes.SetAttribute("type", "email");
 output.Attributes.SetAttribute("id", For.Name);
 output.Attributes.SetAttribute("name", For.Name);
 output.Attributes.SetAttribute("value", For.Model?.ToString() ?? "");
 }
}

המאפיין את הנכס C# בשם מסוים של HTML תכונה (FLT:33 ), נותן לך גישה למודל metadata עבור שילוב מלא עם אימות והצגת לוגיקה.

עיבוד סינכרוני

אם עוזרי התג שלך צריכים לבצע פעולות I/O (למשל, להביא נתונים ממסד נתונים), ההרחבה של:35 במקום זאת:

public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
 var data = await _someService.GetDataAsync();
 output.Content.SetHtmlContent(data);
}

« « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « «

עוזרי טאג תומכים בזריקת בונה כמו כל שירות MVC אחר. פשוט להוסיף את התלות שלך ליוצר, ואת מיכל DI יש לפתור את זה:

public class UserProfileTagHelper : TagHelper
{
 private readonly IUserService _userService;

 public UserProfileTagHelper(IUserService userService)
 {
 _userService = userService;
 }

 public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
 {
 var user = await _userService.GetCurrentUserAsync();
 // render user profile markup
 }
}

שימו לב כי עוזרי תג הם קבועים כברירת מחדל; מקרה חדש נוצר עבור כל שימוש בתצוגת.

תגיות: Helper Components for Global HTML

(ב) ב-ASP.NET Core 2.1, FLT:0Tag Helper Componentsph:1 מאפשר לך להזריק את הסימון לכל תגובה בעולם, בדרך כלל בשימוש עבור תסריטים, סגנונות או ניתוח.

public class GlobalScriptTagHelperComponent : TagHelperComponent
{
 public override void Process(TagHelperContext context, TagHelperOutput output)
 {
 if (output.TagName == "body" && output.Attributes.ContainsName("data-scripts"))
 {
 output.PostContent.AppendHtml("<script src='/js/global.js'></script>");
 }
 }
}

// In Startup.ConfigureServices
services.AddTransient<ITagHelperComponent, GlobalScriptTagHelperComponent>();

דוגמאות מעשיות ל View

המונחים: Conditional Wrapper Tag Helper

תוכן ראפ עם אלמנט נוסף רק אם מצב הוא נתקל, שימושי עבור מכולות פריסה תגובתית:

[HtmlTargetElement("if-wrapper")]
public class IfWrapperTagHelper : TagHelper
{
 public bool Condition { get; set; }

 public override void Process(TagHelperContext context, TagHelperOutput output)
 {
 if (!Condition)
 {
 // Remove the wrapping element, output only the child content
 output.TagName = null;
 output.Content.SetContent(output.Content.GetContent());
 }
 else
 {
 output.TagName = "div";
 output.Attributes.SetAttribute("class", "wrapper");
 }
 }
}

צילום: Lazy Loading and Srcset

יצירת עוזר תג שיוצר תגים תגמולים עם מקורות מרובים:

[HtmlTargetElement("lazy-image")]
public class LazyImageTagHelper : TagHelper
{
 public string Src { get; set; }
 public string Srcset { get; set; }
 public string Alt { get; set; }
 public string CssClass { get; set; }

 public override void Process(TagHelperContext context, TagHelperOutput output)
 {
 output.TagName = "img";
 output.Attributes.SetAttribute("src", Src);
 if (!string.IsNullOrEmpty(Srcset))
 output.Attributes.SetAttribute("srcset", Srcset);
 output.Attributes.SetAttribute("alt", Alt);
 output.Attributes.SetAttribute("loading", "lazy");
 if (!string.IsNullOrEmpty(CssClass))
 output.Attributes.SetAttribute("class", CssClass);
 }
}

סיכום אימות עם מבנה מותאם אישית

במקום להשתמש ב-Moderal-in אימות תג תג, ליצור אחד שמוסיפה סמלים מותאמים אישית וסטיילינג:

[HtmlTargetElement("custom-validation-summary")]
public class CustomValidationSummaryTagHelper : TagHelper
{
 [HtmlAttributeName("asp-validation-summary")]
 public ValidationSummary ValidationSummary { get; set; }

 [ViewContext]
 public ViewContext ViewContext { get; set; }

 public override void Process(TagHelperContext context, TagHelperOutput output)
 {
 var viewData = ViewContext.ViewData;
 var errors = viewData.ModelState.Where(s => s.Value.Errors.Count > 0).SelectMany(s => s.Value.Errors).ToList();

 if (errors.Count == 0)
 {
 output.SuppressOutput();
 return;
 }

 output.TagName = "div";
 output.Attributes.SetAttribute("class", "alert alert-danger");
 var list = new StringBuilder();
 list.Append("<ul class='mb-0'>");
 foreach (var error in errors)
 {
 list.Append($"<li><strong>Error:</strong> {error.ErrorMessage}</li>");
 }
 list.Append("</ul>");
 output.Content.SetHtmlContent(list.ToString());
 }
}

Best Practices for Building Tag Helpers

  • (FLT:0) שמור על הלוגיקה המינימלית של C# ,(FLT:1 ), עוזרי טאג הם עבור טרנספורמציה מצגת, לא לוגיקה עסקית.אם אתה צריך עיבוד נתונים מורכבים, השתמש במרכיב תצוגה או שירות.
  • (ב) [ה]ב[[1924]]]]]], [[1924]]]]]]]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]]]]]]]], [[1924]]]]]]]], [[1924]]]]]]]]]], [[1924]]]]]]]]]], [[1924]]]]]]]]
  • (ב) ,0) שמות של הוראת חיקוי עבור אלמנטים מותאמים אישית של LT:1 , בצע כנס כמו FLT:48 או FLT:49 כדי למנוע התנגשות עם סטנדרטים עתידיים של HTML.
  • (ב) ל[[1924]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]]]]
  • (ב) ויקרא י"א): "ה' (ב)" (ב)"ה')" (ב)"ה', "ה')" (ב"ב)" (בראשית כ"ד, כ"ד).
  • (ב) ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇

מלכודות נפוצות ופתרון בעיות

  • (ב) ויקרא י"א): "לא יגלו את השם" (בראשית כ"ד) ו"ה' (ב)" (ב) "וַיָּעָשָׂעָשָׂה אִם יְהִיתִיתִיתִיתִיתִיתִי" (במדבר כ"ד).
  • (ב) ויקרא י"א): "לא תתאים שמות שמות שאינם מתאימים ל''' (ב) - השתמש בתכונה של 'ה-FLT:55' כדי למפות שמות רכוש C# לשמות תכונת HTML.
  • (ב) אם אתה קורא ל-FLT:0) לפני שאתה מצלם את תוכן הילד, אתה מאבד את ה-HTML הפנימי המקורי.
  • (ב) ויקרא י"א: ויקרא י"א): "הסדר של ביצוע עוקב אחר הסדר האלפביתי כברירת מחדל, אך ניתן לשלוט בו עם רכוש FLT.
  • (FLT:0) בעיות הזרקת הזרקה של הזרקה 1 (הופנה מהדף) - עוזרי טאג אינם חדונים, אם אתה מזריק שירות קבוע, להבטיח את עוזר תג נצרך בתוך אותו היקף הבקשה HTTP (בדרך כלל הוא).

Integrating Custom Tag Helpers into a קיים קוד בסיס

אימוץ עוזרי תג מותאם אישית לא דורש טקס מלא.אתה יכול להתחיל על ידי מתן מחדש את הדפוסים החוזרים ביותר - כגון כפתורים, קלפים או טבלאות נתונים - לתוך עוזרי תגים.לאורך זמן, אתה יכול להתחיל על ידי יצירת ספריית שהופכת למקור יחיד של אמת עבור רכיבי UI שלך.שלב עוזרי תג עם כלים אחרים כגון חלקיים ורכיבים עבור גמישות מקסימלית, לדוגמה, רכיב תצוגה עשוי להביא מידע מורכב ולאחר מכן כדי להעביר את הנתונים הסופי כדי להעביר את זה כדי להפוך את זה כדי להעביר את זה כדי להעביר את זה כדי לעזור.

משאבים חיצוניים וקריאה נוספת

  • (ב) ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
  • (ב) ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
  • (ב) ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
  • (ב) ,0) ,Andrew Lock's series on Custom tags

מסקנה

עוזרי תג מותאם מייצגים אבולוציה משמעותית כיצד מפתחים מרכיבים תצוגות ב-ASP.NET Core MVC. על ידי כך מאפשרים לך להגדיר את רכיבי HTML שלך ותכונות המבצעות לוגיקה בצד השרת, הם לגשר על הפער בין סימון ידידותי למעצב ושליטה מתכנתים.מנגנרים פשוטים ועד מורכבים, מצב-מודע רכיבי שמשתלבים עם הזריקה, תגים מעצימים אותך כדי לבנות, לבחינה עקבית, עקבית, עקבית, עקבית, ולת למשתמשי-התחל-ל-לעזור לך לראות את הממשקים יותר כדי להפוך את התבנית שלך לממשקים יותר טוב יותר.