{"id":275313,"date":"2016-03-02T11:50:04","date_gmt":"2016-03-02T08:50:04","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=275313"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=275313","title":{"rendered":"\u0413\u043e\u0442\u043e\u0432\u0438\u043c ASP.NET Core: \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 Tag Helper"},"content":{"rendered":"<br \/>\n<blockquote><p><i>\u041c\u044b \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u043d\u0430\u0448\u0443 \u043a\u043e\u043b\u043e\u043d\u043a\u0443 \u043f\u043e \u0442\u0435\u043c\u0435 ASP.NET Core \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0435\u0439 \u043e\u0442 \u0421\u0442\u0430\u043d\u0438\u0441\u043b\u0430\u0432\u0430 \u0423\u0448\u0430\u043a\u043e\u0432\u0430 (  <a href=\"https:\/\/habrahabr.ru\/users\/juststas\/\" class=\"user_link\">JustStas<\/a>) \u2014 team lead \u0438\u0437 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 DataArt. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0421\u0442\u0430\u0441 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043e \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u0445 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0432\u043e\u0438\u0445 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u0442\u0435\u0433-\u0445\u0435\u043b\u043f\u0435\u0440\u043e\u0432 \u0432 ASP.NET Core. \u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u0438\u0437 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 <a href=\"http:\/\/habrahabr.ru\/search\/?q=%5B%23aspnetcolumn%5D&amp;target_type=posts\">#aspnetcolumn<\/a> \u2014 \u0412\u043b\u0430\u0434\u0438\u043c\u0438\u0440 \u042e\u043d\u0435\u0432<\/i><\/p><\/blockquote>\n<p>\u0412 <a href=\"https:\/\/habrahabr.ru\/post\/276277\/\">\u043f\u0440\u043e\u0448\u043b\u044b\u0439 \u0440\u0430\u0437<\/a> \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0432 ASP.NET Core 1.0 \u0442\u0435\u0433-\u0445\u044d\u043b\u043f\u0435\u0440\u044b. \u0412 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u0442\u0435\u0433-\u0445\u044d\u043b\u043f\u0435\u0440\u043e\u0432, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0443\u0447\u0430\u0441\u0442\u043a\u043e\u0432 HTML-\u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0438.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/habrastorage.org\/files\/57b\/2c3\/924\/57b2c39241ed46259315ba7d0d5177b1.jpg\"\/><\/div>\n<p>  <\/p>\n<h3>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h3>\n<p>  \u0424\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0442\u0435\u0433-\u0445\u044d\u043b\u043f\u0435\u0440\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u044e\u0431\u043e\u0439 \u043a\u043b\u0430\u0441\u0441, \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043e\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 <b>ITagHelper<\/b>.\u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043e\u0442 <b>ITagHelper<\/b> \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u043d\u0435 \u043d\u0430\u0434\u043e, \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u043e\u0442 \u043a\u043b\u0430\u0441\u0441\u0430 <b>TagHelper<\/b>, \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044f \u043c\u0435\u0442\u043e\u0434 Process \/ ProcessAsync, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u043e \u0445\u043e\u0434\u0443 \u0441\u0442\u0430\u0442\u044c\u0438.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<blockquote><p><a href=\"https:\/\/github.com\/StanislavUshakov\/CustomTagHelpers\"><img loading=\"lazy\" decoding=\"async\" title=\"aspnetcolumngithub\" alt=\"aspnetcolumngithub\" src=\"https:\/\/habrastorage.org\/files\/e5a\/eff\/108\/e5aeff1080f44ada899062dee76a3e24.png\" width=\"240\" align=\"right\" height=\"88\"\/><\/a><b>\u0421\u043e\u0432\u0435\u0442!<\/b> \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u043b\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438\u0437 GitHub <a href=\"https:\/\/github.com\/StanislavUshakov\/CustomTagHelpers\">https:\/\/github.com\/StanislavUshakov\/CustomTagHelpers<\/a>.<\/p><\/blockquote>\n<p>  <\/p>\n<h3>\u0418\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430<\/h3>\n<p>  \u041c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Visual Studio 2015 Community Edition. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u043e\u0432\u044b\u0439 ASP.NET 5 \u0441\u0430\u0439\u0442 (\u0440\u0438\u0441\u0443\u043d\u043e\u043a 1).<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  width=\"650\" src=\"https:\/\/habrastorage.org\/files\/1c0\/889\/796\/1c08897969e04070a0fc041490065287.png\"\/><\/div>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u0441 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0443\u0441\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0432\u044b\u0431\u0435\u0440\u0435\u043c \u0448\u0430\u0431\u043b\u043e\u043d\u201cWebApplication\u201d (\u0440\u0438\u0441\u0443\u043d\u043e\u043a 2), \u043d\u043e \u0443\u0434\u0430\u043b\u0438\u043c \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e: \u201cChange Authentication\u201d, \u0434\u0430\u043b\u0435\u0435 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u201cNo authentication\u201d. <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  width=\"650\" src=\"https:\/\/habrastorage.org\/files\/392\/9fd\/e0b\/3929fde0ba114a5c8701d352db3bbdd9.png\"\/><\/div>\n<p>  \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043f\u0440\u043e\u0435\u043a\u0442 \u0441 \u0443\u0436\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u043c MVC, \u043e\u0434\u043d\u0438\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u043c \u0438 \u0442\u0440\u0435\u043c\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f\u043c\u0438: Index, About, Contact. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043d\u043e\u0432\u0443\u044e \u043f\u0430\u043f\u043a\u0443 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442, \u043d\u0430\u0437\u043e\u0432\u0435\u043c \u0435\u0435 <b>TagHelpers<\/b>: \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0435\u0435 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a, \u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u044c, \u0438 \u043b\u0443\u0447\u0448\u0435 \u0435\u0435 \u0441\u043e\u0431\u043b\u044e\u0434\u0430\u0442\u044c \u2013 \u0432\u0441\u0435 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0440\u0443\u0447\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0442\u0435\u0433-\u0445\u044d\u043b\u043f\u0435\u0440\u044b \u043a\u043b\u0430\u0441\u0442\u044c \u0432 \u044d\u0442\u0443 \u043f\u0430\u043f\u043a\u0443. \u041f\u043e\u043b\u0443\u0447\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 (\u0440\u0438\u0441\u0443\u043d\u043e\u043a 3).<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/habrastorage.org\/files\/182\/c9b\/566\/182c9b5664a6408194a611295ef4283c.png\"\/><\/div>\n<h3>EmailTagHelper<\/h3>\n<p>  \u0412 \u043a\u043e\u0434\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f <b>Contact.cshtml<\/b> \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0443, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0443\u044e \u0430\u0434\u0440\u0435\u0441\u0430 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b.<\/p>\n<pre><code class=\"html\">&lt;address&gt; &lt;strong&gt;Support:&lt;\/strong&gt;&lt;a href=&quot;mailto:Support@example.com&quot;&gt;Support@example.com&lt;\/a&gt;&lt;br \/&gt; &lt;strong&gt;Marketing:&lt;\/strong&gt;&lt;a href=&quot;mailto:Marketing@example.com&quot;&gt;Marketing@example.com&lt;\/a&gt; &lt;\/address&gt; <\/code><\/pre>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0442\u0435\u0433-\u0445\u044d\u043b\u043f\u0435\u0440 <b>email<\/b>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"html\">&lt;email&gt;Support&lt;\/email&gt; <\/code><\/pre>\n<p>  \u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e HTML \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0443:<\/p>\n<pre><code class=\"html\">&lt;a href=&quot;mailto:Support@example.com &quot;&gt;Support@example.com&lt;\/a&gt; <\/code><\/pre>\n<p>  \u0422\u0430\u043a\u043e\u0439 \u0442\u0435\u0433-\u0445\u044d\u043b\u043f\u0435\u0440 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 \u043d\u0430\u0434\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0441\u0441\u044b\u043b\u043e\u043a \u043d\u0430 \u0430\u0434\u0440\u0435\u0441\u0430 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b \u043e\u0434\u043d\u043e\u0433\u043e \u0434\u043e\u043c\u0435\u043d\u0430. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043d\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b \u0432 \u043f\u0430\u043f\u043a\u0443 <b>TagHelpers<\/b>, \u043d\u0430\u0437\u043e\u0432\u0435\u043c \u0435\u0433\u043e <b>EmailTagHelper.cs<\/b>.<\/p>\n<pre><code class=\"cs\">usingMicrosoft.AspNet.Razor.TagHelpers;  namespaceCustomTagHelpersAndViewComponents.TagHelpers {     public class EmailTagHelper : TagHelper     {         public string MailTo { get; set; }          public override void Process(TagHelperContext context, TagHelperOutput output)         {             output.TagName = &quot;a&quot;;    \/\/ \u0437\u0430\u043c\u0435\u043d\u0438\u043c \u0442\u0435\u0433 &lt;email&gt; \u043d\u0430 \u0442\u0435\u0433 &lt;a&gt;         }     } } <\/code><\/pre>\n<p>  \u0423\u0436\u0435 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u044d\u0442\u043e\u0433\u043e \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0442\u0435\u0433-\u0445\u044d\u043b\u043f\u0435\u0440\u0430 \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:  <\/p>\n<ul>\n<li>\u0422\u0435\u0433-\u0445\u044d\u043b\u043f\u0435\u0440\u044b \u043f\u0440\u0438\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e: \u0442\u0435\u0433, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u0432 cshtml \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u0445, \u0440\u0430\u0432\u0435\u043d \u0438\u043c\u0435\u043d\u0438 \u043a\u043b\u0430\u0441\u0441\u0430 \u0442\u0435\u0433-\u0445\u044d\u043b\u043f\u0435\u0440\u0430 \u043c\u0438\u043d\u0443\u0441 <i>TagHelper<\/i>. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0442\u0435\u0433 <b>email<\/b>. \u0414\u0430\u043b\u044c\u0448\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u044d\u0442\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u041c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043d\u0430\u0437\u0432\u0430\u0442\u044c \u043d\u0430\u0448 \u0442\u0435\u0433-\u0445\u044d\u043b\u043f\u0435\u0440 \u0438 \u043f\u0440\u043e\u0441\u0442\u043e <b>Email<\/b>, \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u0431\u044b \u0442\u043e\u0442 \u0436\u0435, \u043d\u043e \u043f\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0443 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u0441\u0442\u0444\u0438\u043a\u0441 <b>TagHelper<\/b> \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c.<\/li>\n<li>\u041f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044f \u043c\u0435\u0442\u043e\u0434 <i>Process<\/i>, \u043c\u044b \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043a\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u043d\u0430\u0448\u0438\u043c \u0442\u0435\u0433-\u0445\u044d\u043b\u043f\u0435\u0440\u043e\u043c. \u0422\u0430\u043a\u0436\u0435 \u043a\u043b\u0430\u0441\u0441 <b>TagHelper<\/b> \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043c\u0435\u0442\u043e\u0434 <i>ProcessAsync<\/i> \u0441 \u0442\u0430\u043a\u0438\u043c\u0438 \u0436\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438.<\/li>\n<li>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <i>context<\/i> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e HTML \u0442\u0435\u0433\u0430.<\/li>\n<li>\u041f\u0430\u0440\u043c\u0435\u0442\u0440 <i>output<\/i> \u0445\u0440\u0430\u043d\u0438\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0431 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u043c HTML \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u0432 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438, \u0438 \u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u043c.<\/li>\n<\/ul>\n<p>  \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043d\u0430\u043c\u0438 \u0442\u0435\u0433-\u0445\u044d\u043b\u043f\u0435\u0440, \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u0444\u0430\u0439\u043b <b>Views\/_ViewImports.cshtml<\/b> \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0443 \u0434\u043b\u044f \u0435\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f.<\/p>\n<pre><code class=\"html\">@using CustomTagHelpersAndViewComponents @addTagHelper &quot;*, Microsoft.AspNet.Mvc.TagHelpers&quot; @addTagHelper &quot;*, CustomTagHelpersAndViewComponents&quot; <\/code><\/pre>\n<p>  \u041c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043e\u0447\u043d\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b, \u0447\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0441\u0440\u0430\u0437\u0443 \u0432\u0441\u0435 \u0442\u0435\u0433-\u0445\u044d\u043b\u043f\u0435\u0440\u044b \u0438\u0437 \u0441\u0431\u043e\u0440\u043a\u0438. \u041f\u0435\u0440\u0432\u044b\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b <b>@addTagHelper<\/b> \u2014 \u044d\u0442\u043e \u0438\u043c\u044f \u0442\u0435\u0433-\u0445\u044d\u043b\u043f\u0435\u0440\u0430 (\u0438\u043b\u0438 \u0437\u0432\u0435\u0437\u0434\u043e\u0447\u043a\u0430), \u0432\u0442\u043e\u0440\u043e\u0439 \u2013 \u0441\u0431\u043e\u0440\u043a\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u043d\u0438 \u0438\u0449\u0443\u0442\u0441\u044f. \u0415\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u0434\u0438\u043d \u0442\u0435\u0433-\u0445\u044d\u043b\u043f\u0435\u0440, \u0430 \u043d\u0435 \u0432\u0441\u0435 \u0441\u0440\u0430\u0437\u0443, \u0442\u043e \u043d\u0430\u0434\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0435\u0433\u043e \u043f\u043e\u043b\u043d\u043e\u0435 \u0438\u043c\u044f (FQN \u2013 fully qualified name):<\/p>\n<pre><code class=\"html\">@using CustomTagHelpersAndViewComponents @addTagHelper &quot;*, Microsoft.AspNet.Mvc.TagHelpers&quot; @addTagHelper &quot;CustomTagHelpersAndViewComponents.TagHelpers.EmailTagHelper, CustomTagHelpersAndViewComponents&quot; <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0431\u043d\u043e\u0432\u0438\u043c \u043a\u043e\u0434 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f <b>Views\/Home\/Contact.cshtml<\/b>, \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0432 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0443\u044e \u043f\u043e\u0447\u0442\u0443:<\/p>\n<pre><code class=\"html\">&lt;address&gt;     &lt;strong&gt;Support:&lt;\/strong&gt;&lt;email&gt;Support&lt;\/email&gt;&lt;br \/&gt;     &lt;strong&gt;Marketing:&lt;\/strong&gt;&lt;email&gt;Marketing&lt;\/email&gt; &lt;\/address&gt; <\/code><\/pre>\n<p>  Visual Studio 2015 \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0441\u0432\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0442\u0435\u0433-\u0445\u044d\u043b\u043f\u0435\u0440\u044b, \u043d\u0430\u0448 \u0432\u043d\u043e\u0432\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u2013 \u043d\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/habrastorage.org\/files\/729\/e2a\/11b\/729e2a11b24746ab873bc143972ec3c6.png\"\/><\/div>\n<p>  \u041e\u0442\u043a\u0440\u043e\u0435\u043c \u0441\u0430\u0439\u0442 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u0438 \u0443\u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0442\u0435\u0433 <b>email<\/b> \u0437\u0430\u043c\u0435\u043d\u0438\u043b\u0441\u044f \u043d\u0430 \u0442\u0435\u0433 <b>a<\/b>, \u0441\u0430\u043c\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443 \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0443\u044e \u043f\u043e\u0447\u0442\u0443. \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0431\u0443\u0434\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 <i>email-to<\/i>, \u0434\u043e\u043c\u0435\u043d \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0434\u0430\u043d \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043e\u0439 \u0432 \u0442\u0435\u0433-\u0445\u044d\u043b\u043f\u0435\u0440\u0435.<\/p>\n<pre><code class=\"cs\">using Microsoft.AspNet.Razor.TagHelpers;  namespace CustomTagHelpersAndViewComponents.TagHelpers {     public class EmailTagHelper : TagHelper     {         private const string EmailDomain = &quot;example.com&quot;;          public string MailTo { get; set; }          public override void Process(TagHelperContext context, TagHelperOutput output)         {             output.TagName = &quot;a&quot;;             string address = MailTo + &quot;@&quot; + EmailDomain;             output.Attributes[&quot;href&quot;] = &quot;mailto:&quot; + address;             output.Content.SetContent(address);         }     } } <\/code><\/pre>\n<p>  \u041e\u0442\u043c\u0435\u0442\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u0434\u0430. \u041f\u0435\u0440\u0432\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442: \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <i>MailTo<\/i> \u0438\u0437 PascalCase \u0432 C# \u043a\u043e\u0434\u0435 \u0441\u0442\u0430\u043d\u0435\u0442 <a href=\"http:\/\/stackoverflow.com\/questions\/11273282\/whats-the-name-for-hyphen-separated-case\/12273101#12273101\">low-kebab-case<\/a> \u0432 \u043a\u043e\u0434\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f: <i>email-to<\/i>, \u043a\u0430\u043a \u044d\u0442\u043e \u0438 \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u0432\u043e \u0444\u0440\u043e\u043d\u0442-\u0435\u043d\u0434\u0435. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u043c\u0435\u0442\u043e\u0434\u0430 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0442\u0435\u0433\u0430. \u041d\u0430\u0440\u044f\u0434\u0443 \u0441 \u0442\u0430\u043a\u0438\u043c \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u043e\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 <i>output.Attributes[\u00abhref\u00bb] = \u00abmailto:\u00bb + address;<\/i> \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 <i>output.Attributes.Add<\/i>.<br \/>  \u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0431\u043d\u043e\u0432\u0438\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 <b>Views\/Home\/Contact.cshtml<\/b>:<\/p>\n<pre><code class=\"html\">&lt;address&gt;     &lt;strong&gt;Support:&lt;\/strong&gt; &lt;email mail-to=&quot;Support&quot;&gt;&lt;\/email&gt;&lt;br \/&gt;     &lt;strong&gt;Marketing:&lt;\/strong&gt; &lt;email mail-to=&quot;Marketing&quot;&gt;&lt;\/email&gt; &lt;\/address&gt; <\/code><\/pre>\n<p>  \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f HTML \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0430:<\/p>\n<pre><code class=\"html\">&lt;address&gt;     &lt;strong&gt;Support:&lt;\/strong&gt; &lt;a href=&quot;mailto:Support@example.com&quot;&gt;Support@example.com&lt;\/a&gt;&lt;br&gt;     &lt;strong&gt;Marketing:&lt;\/strong&gt; &lt;a href=&quot;mailto:Marketing@example.com&quot;&gt;Marketing@example.com&lt;\/a&gt; &lt;\/address&gt; <\/code><\/pre>\n<p>  \u0417\u0430\u043c\u0435\u0442\u0438\u043c, \u0447\u0442\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c <i>&lt;email mail-to=\u00abSupport\u00bb \/&gt;<\/i>, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0434\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u0442\u0440\u0438\u0431\u0443\u0442, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0432 \u0441\u0431\u043e\u0440\u043a\u0443 <i>Microsoft.AspNet.Razor.TagHelpers<\/i>:<\/p>\n<pre><code class=\"cs\">[HtmlTargetElement(&quot;email&quot;, TagStructure = TagStructure.WithoutEndTag)] <\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u0432\u043c\u0435\u0441\u0442\u043e <i>TagStructure.WithoutEndTag<\/i> \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i> TagStructure.NormalOrSelfClosing<\/i>, \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u0430\u043a <i>&lt;email&gt;&lt;\/email&gt;<\/i>, \u0442\u0430\u043a \u0438 <i>&lt;email \/&gt;<\/i>.<\/p>\n<h3>\u0422\u0435\u0433-\u0445\u044d\u043b\u043f\u0435\u0440 bold<\/h3>\n<p>  \u041d\u0430\u043f\u0438\u0448\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0442\u0435\u0433-\u0445\u044d\u043b\u043f\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u043a \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c HTML \u0442\u0435\u0433\u0430\u043c. \u041f\u0443\u0441\u0442\u044c \u043e\u043d \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0442\u0435\u043a\u0441\u0442 \u0432 \u043f\u043e\u043b\u0443\u0436\u0438\u0440\u043d\u044b\u0439 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 HTML \u0442\u0435\u0433\u043e\u0432, \u043a \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f. \u041d\u0430\u043c \u043e\u043f\u044f\u0442\u044c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442 <i>HtmlTargetElement<\/i>. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u043f\u0430\u043f\u043a\u0443 <b>TagHelpers<\/b> \u043d\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b <b>BoldTagHelper.cs<\/b> \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c:<\/p>\n<pre><code class=\"cs\">using Microsoft.AspNet.Razor.TagHelpers;  namespace CustomTagHelpersAndViewComponents.TagHelpers {     [HtmlTargetElement(Attributes = &quot;bold&quot;)]     public class BoldTagHelper : TagHelper     {         public override void Process(TagHelperContext context, TagHelperOutput output)         {             output.Attributes.RemoveAll(&quot;bold&quot;);             output.PreContent.SetHtmlContent(&quot;&lt;strong&gt;&quot;);             output.PostContent.SetHtmlContent(&quot;&lt;\/strong&gt;&quot;);         }     } } <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0432 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 <i>HtmlTargetElement<\/i> \u043c\u044b \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0438\u043c\u044f \u0442\u0435\u0433\u0430, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0442\u0435\u0433-\u0445\u044d\u043b\u043f\u0435\u0440 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f, \u0430 \u0438\u043c\u044f HTML \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043a \u0440\u0430\u0437\u043d\u044b\u043c HTML \u0442\u0435\u0433\u0430\u043c. \u041f\u043e\u043c\u0435\u043d\u044f\u0435\u043c \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0443 \u0432 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 <b>About.cshtml<\/b>:<\/p>\n<pre><code class=\"html\">&lt;p bold&gt;Use this area to provide additional information.&lt;\/p&gt; <\/code><\/pre>\n<p>  \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f HTML \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0430:<\/p>\n<pre><code class=\"html\">&lt;p&gt;&lt;strong&gt;Use this area to provide additional information.&lt;\/strong&gt;&lt;\/p&gt; <\/code><\/pre>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e, \u0435\u0441\u043b\u0438 \u043c\u044b \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <b>bold<\/b> \u043d\u0435 \u043a\u0430\u043a \u0430\u0442\u0440\u0438\u0431\u0443\u0442, \u0430 \u043a\u0430\u043a \u0438\u043c\u044f HTML \u0442\u0435\u0433\u0430, \u043a\u043e\u0434 \u0442\u0435\u0433-\u0445\u044d\u043b\u043f\u0435\u0440\u0430 \u0432\u044b\u0437\u0432\u0430\u043d \u043d\u0435 \u0431\u0443\u0434\u0435\u0442. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c, \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u043a \u043a\u043b\u0430\u0441\u0441\u0443 \u0442\u0435\u0433-\u0445\u044d\u043b\u043f\u0435\u0440\u0430 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 <i>HtmlTargetElement<\/i> \u0435\u0449\u0435 \u0440\u0430\u0437, \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432 \u0435\u043c\u0443 \u0438\u043c\u044f \u0442\u0435\u0433\u0430 <i>bold<\/i>:<\/p>\n<pre><code class=\"cs\">[HtmlTargetElement(&quot;bold&quot;)] <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0432 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0438 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"html\">&lt;bold&gt;Use this area to provide additional information.&lt;\/bold &gt; <\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u0440\u0430\u0437\u0443 \u043e\u0431\u0430 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 <i>HtmlTargetElement<\/i> \u043a \u043d\u0430\u0448\u0435\u043c\u0443 \u043a\u043b\u0430\u0441\u0441\u0443 \u0442\u0435\u0433-\u0445\u044d\u043b\u043f\u0435\u0440\u0430:<\/p>\n<pre><code class=\"cs\">[HtmlTargetElement(&quot;bold&quot;)] [HtmlTargetElement(Attributes = &quot;bold&quot;)] <\/code><\/pre>\n<p>  \u0422\u043e \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u0441\u0432\u044f\u0437\u0430\u043d\u044b \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0418\u041b\u0418: \u0438\u043b\u0438 \u0442\u0435\u0433 bold, \u0438\u043b\u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 bold. \u041c\u043e\u0436\u043d\u043e \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0434\u0432\u0443\u0445 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 <i>HtmlTargetElement<\/i>, \u0432\u0441\u0435 \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0441\u0432\u044f\u0437\u0430\u043d\u044b \u0447\u0435\u0440\u0435\u0437 \u0418\u041b\u0418. \u0415\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0441\u0432\u044f\u0437\u0430\u0442\u044c \u0438\u0445 \u0447\u0435\u0440\u0435\u0437 \u0418: \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u043a \u0442\u0435\u0433\u0443 bold \u0441 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u043c bold, \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u044d\u0442\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0432 \u043e\u0434\u043d\u043e\u043c \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0435 <i>HtmlTargetElement<\/i>:<\/p>\n<pre><code class=\"cs\">[HtmlTargetElement(&quot;bold&quot;, Attributes = &quot;bold&quot;)] <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u043e\u0434 \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u0435\u0442\u043e\u0434\u0430 <i>Process<\/i>. \u041c\u0435\u0442\u043e\u0434 <i>output.Attributes.RemoveAll(\u00abbold\u00bb);<\/i> \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 <i>bold<\/i> \u0443 HTML \u0442\u0435\u0433\u0430. \u0417\u0430\u0442\u0435\u043c \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u0441\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0442\u0435\u0433\u0430 \u043e\u0431\u0440\u0430\u043c\u0438\u0442\u044c \u0442\u0435\u0433\u043e\u043c <b>strong<\/b>. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 <i>PreContent<\/i> \u0438 <i>PostContent<\/i> \u043e\u0431\u044a\u0435\u043a\u0442\u0430 <i>output<\/i>. \u041e\u043d\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u043e\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u0442\u0435\u0433\u0430, \u043d\u043e \u0434\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u0438 \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435. \u0421\u0445\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"html\">&lt;p bold&gt;PRECONTENT Use this area to provide additional information. POST_CONTENT&lt;\/p&gt; <\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u0436\u0435 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u043e\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0432\u043d\u0435 \u0442\u0435\u0433\u0430, \u043d\u0430\u0434\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 <i>PreElement<\/i> \u0438 <i>PostElement<\/i>, \u0442\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<pre><code class=\"html\">PRE_ELEMENT&lt;p bold&gt;Use this area to provide additional information.&lt;\/p&gt;POST_ELEMENT <\/code><\/pre>\n<p>  \u0418 \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 <i>SetHtmlContent<\/i>, \u0430 \u043d\u0435 <i>SetContent<\/i>, \u0435\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c HTML \u0442\u0435\u0433\u0438, \u0438\u043d\u0430\u0447\u0435 \u043c\u0435\u0442\u043e\u0434 <i>SetContent<\/i> \u043f\u0435\u0440\u0435\u043a\u043e\u0434\u0438\u0440\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0438 \u0442\u0435\u0433 <b>strong<\/b> \u043d\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u0441\u044f.<\/p>\n<h3>\u0410\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u0442\u0435\u0433-\u0445\u044d\u043b\u043f\u0435\u0440 copyright<\/h3>\n<p>  \u0414\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0430\u043b\u0438 \u043c\u0435\u0442\u043e\u0434 <i>Process<\/i>, \u0441\u0435\u0439\u0447\u0430\u0441 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u0438\u043c \u0435\u0433\u043e \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e: \u043c\u0435\u0442\u043e\u0434 <i>ProcessAsync<\/i>. \u041d\u0430\u043f\u0438\u0448\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0442\u0435\u0433-\u0445\u044d\u043b\u043f\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0443:<\/p>\n<pre><code class=\"html\">&lt;p&gt;&copy; 2016 MyCompany&lt;\/p&gt; <\/code><\/pre>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u043f\u0430\u043f\u043a\u0443 <b>TagHelpers<\/b> \u043d\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b <b>CopyrightTagHelper.cs<\/b>:<\/p>\n<pre><code class=\"cs\">using System; using System.Threading.Tasks; using Microsoft.AspNet.Razor.TagHelpers;  namespace CustomTagHelpersAndViewComponents.TagHelpers {     \/\/\/ &lt;summary&gt;     \/\/\/ Custom tag helper for generating copyright information. Content inside will be added after: &copy; Year     \/\/\/ &lt;\/summary&gt;     [HtmlTargetElement(&quot;copyright&quot;)]     public class CopyrightTagHelper : TagHelper     {         public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)         {             var content = await output.GetChildContentAsync();             string copyright = $&quot;&lt;p&gt;&copy; {DateTime.Now.Year} {content.GetContent()}&lt;\/p&gt;&quot;;             output.Content.SetHtmlContent(copyright);         }     } } <\/code><\/pre>\n<p>  \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 <i>Process<\/i>, \u043c\u0435\u0442\u043e\u0434 <i>ProcessAsync<\/i> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 \u0442\u0438\u043f\u0430 <b>Task<\/b>. \u0422\u0430\u043a\u0436\u0435 \u043a \u043c\u0435\u0442\u043e\u0434\u0443 \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 <i>async<\/i>, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u0435\u0442\u043e\u0434\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0442\u0435\u0433\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 <i>await output.GetChildContentAsync();<\/i>. \u0417\u0430\u0442\u0435\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u043e\u0432\u043e\u0433\u043e \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u0441\u0442\u0440\u043e\u043a \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 C# 6 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0442\u0435\u0433\u0430 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0435\u0433\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0435\u0442\u043e\u0434\u0430 <i>output.Content.SetHtmlContent(copyright);<\/i>. \u0412\u043e \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0430\u0441\u043f\u0435\u043a\u0442\u0430\u0445, \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u0442\u0435\u0433-\u0445\u044d\u043b\u043f\u0435\u0440 \u043d\u0435 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e.<\/p>\n<h3>Best practices \u0438 \u0432\u044b\u0432\u043e\u0434\u044b<\/h3>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u0442\u0435\u0433-\u0445\u044d\u043b\u043f\u0435\u0440, \u043d\u0430\u0434\u043e \u0437\u043d\u0430\u0442\u044c, \u043a\u0430\u043a \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0435. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0442\u0435\u0433-\u0445\u044d\u043b\u043f\u0435\u0440\u044b, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0432 MVC: <a href=\"https:\/\/github.com\/aspnet\/Mvc\/tree\/dev\/src\/Microsoft.AspNetCore.Mvc.TagHelpers\">Microsoft.AspNetCore.Mvc.TagHelpers<\/a>. \u0418 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u0441\u0432\u043e\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u0442\u0435\u0433-\u0445\u044d\u043b\u043f\u0435\u0440\u044b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a.<\/p>\n<p>  \u0412\u0435\u0441\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0434\u043e\u0441\u0443\u0442\u043f\u0435\u043d \u0432 \u0413\u0438\u0442\u0425\u0430\u0431\u0435 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443: <a href=\"https:\/\/github.com\/StanislavUshakov\/CustomTagHelpers\">Custom Tag Helpers<\/a>.<\/p>\n<p>  \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0442\u0435\u0433-\u0445\u044d\u043b\u043f\u0435\u0440\u044b \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0447\u0430\u0441\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0449\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 HTML \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430. \u0415\u0441\u043b\u0438 \u0436\u0435 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0438\u043d\u043a\u0430\u043f\u0441\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u043b\u0443\u0447\u0448\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"http:\/\/docs.asp.net\/projects\/mvc\/en\/latest\/views\/view-components.html\">View Components<\/a>.<\/p>\n<p>  \u041f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 ASP.NET Core 1.0, \u0441\u043e\u043e\u0431\u0449\u0430\u0439\u0442\u0435 \u043e \u0431\u0430\u0433\u0430\u0445, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0439\u0442\u0435 \u0444\u0438\u0447\u0438!<\/p>\n<h3>\u0410\u0432\u0442\u043e\u0440\u0430\u043c<\/h3>\n<p>  \u0414\u0440\u0443\u0437\u044c\u044f, \u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043a\u043e\u043b\u043e\u043d\u043a\u0443 \u0441\u0432\u043e\u0438\u043c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u043c, \u0442\u043e \u043f\u0440\u043e\u0448\u0443 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043c\u043d\u0435 \u043d\u0430 <a href=\"mailto:vyunev@microsoft.com\">vyunev@microsoft.com<\/a> \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0441\u0443\u0434\u0438\u0442\u044c \u0432\u0441\u0435 \u0434\u0435\u0442\u0430\u043b\u0438. \u041c\u044b \u0440\u0430\u0437\u044b\u0441\u043a\u0438\u0432\u0430\u0435\u043c \u0430\u0432\u0442\u043e\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e ASP.NET \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0442\u0435\u043c\u044b.<\/p>\n<p>  <img decoding=\"async\" align=\"right\" width=\"250\" src=\"https:\/\/habrastorage.org\/files\/142\/321\/7d4\/1423217d48a24d688995ae9935c6f812.png\"\/>  <\/p>\n<h3>\u041e\u0431 \u0430\u0432\u0442\u043e\u0440\u0435<\/h3>\n<p>  <b>\u0421\u0442\u0430\u043d\u0438\u0441\u043b\u0430\u0432 \u0423\u0448\u0430\u043a\u043e\u0432<\/b><br \/>  Senior .Net Developer \/ Team lead \u0432 DataArt<\/p>\n<p>  \u0420\u043e\u0434\u0438\u043b\u0441\u044f, \u0443\u0447\u0438\u043b\u0441\u044f \u0432 \u0412\u043e\u0440\u043e\u043d\u0435\u0436\u0435. .Net&#8217;\u043e\u043c \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c \u0443\u0436\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 6 \u043b\u0435\u0442, \u0434\u043e \u044d\u0442\u043e\u0433\u043e \u0434\u0430\u0436\u0435 MFC \u0432\u0438\u0434\u0435\u043b. \u041b\u044e\u0431\u043b\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c (\u043d\u0435\u0434\u0430\u0432\u043d\u043e \u0434\u043e\u0448\u043b\u0438 \u0440\u0443\u043a\u0438 \u0434\u043e \u0410\u0440\u0434\u0443\u0438\u043d\u043e, \u0438\u0433\u0440\u0430\u044e\u0441\u044c), \u0447\u0438\u0442\u0430\u0442\u044c \u043a\u043d\u0438\u0433\u0438 (\u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0431\u0443\u043c\u0430\u0436\u043d\u044b\u0435), \u0438\u0433\u0440\u0430\u0442\u044c \u0432 \u0427\u0442\u043e\u0413\u0434\u0435\u041a\u043e\u0433\u0434\u0430 (\u0441\u043f\u043e\u0440\u0442\u0438\u0432\u043d\u043e\u0435), \u0443\u0447\u0438\u0442\u044c \u0438 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0432\u043e \u0432\u0441\u0435\u043c \u043d\u043e\u0432\u043e\u043c. \u0425\u043e\u0447\u0443 \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u0437\u0430\u0449\u0438\u0442\u0438\u0442\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u0443\u044e \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u0441\u043a\u0443\u044e.<\/p>\n<p>   <a href=\"https:\/\/habrahabr.ru\/users\/juststas\/\" class=\"user_link\">JustStas<\/a>        \t<\/p>\n<div class=\"polling\">\n<form action=\"\/json\/polling\/\" class=\"poll\" method=\"post\">\n<div class=\"poll_title\">\u041f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u043b\u0438 \u0432\u0430\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 Tag Helpers?<\/div>\n<p>  \t\t<input type=\"hidden\" name=\"post_id\" value=\"278251\"\/> \t\t<input type=\"hidden\" name=\"polling_question_id\" value=\"14675\"\/>  \t\t<\/p>\n<table class=\"answer\">\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"radio\" id=\"vv71701\" \t\t\t\t\t\tclass=\"radio js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"71701\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv71701\">\u0414\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"radio\" id=\"vv71703\" \t\t\t\t\t\tclass=\"radio js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"71703\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv71703\">\u041d\u0435\u0442, \u043d\u043e \u0431\u044b\u043b\u043e \u043d\u0443\u0436\u043d\u043e, \u0442\u0435\u043f\u0435\u0440\u044c \u0437\u043d\u0430\u044e \u043a\u0430\u043a<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"radio\" id=\"vv71705\" \t\t\t\t\t\tclass=\"radio js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"71705\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv71705\">\u041f\u043e\u043a\u0430 \u043d\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c, \u0431\u0443\u0434\u0443 \u0437\u043d\u0430\u0442\u044c<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"radio\" id=\"vv71707\" \t\t\t\t\t\tclass=\"radio js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"71707\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv71707\">\u041d\u0435\u0442, \u0438 \u043f\u043e\u043a\u0430 \u043d\u0435 \u0432\u0438\u0436\u0443 \u0441\u043c\u044b\u0441\u043b\u0430<\/label> \t\t\t\t<\/td>\n<\/tr>\n<\/table>\n<p class=\"total\">\u041f\u0440\u043e\u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0430\u043b 1 \u0447\u0435\u043b\u043e\u0432\u0435\u043a. \u0412\u043e\u0437\u0434\u0435\u0440\u0436\u0430\u0432\u0448\u0438\u0445\u0441\u044f \u043d\u0435\u0442.<\/p>\n<\/p><\/form>\n<p class=\"for_users_only_msg\">\u0422\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u043f\u0440\u043e\u0441\u0435. <a href=\"https:\/\/habrahabr.ru\/auth\/login\/\">\u0412\u043e\u0439\u0434\u0438\u0442\u0435<\/a>, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430.<\/p>\n<\/p><\/div>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habrahabr.ru\/post\/278251\/\"> https:\/\/habrahabr.ru\/post\/278251\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<br \/>\n<blockquote><p><i>\u041c\u044b \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u043d\u0430\u0448\u0443 \u043a\u043e\u043b\u043e\u043d\u043a\u0443 \u043f\u043e \u0442\u0435\u043c\u0435 ASP.NET Core \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0435\u0439 \u043e\u0442 \u0421\u0442\u0430\u043d\u0438\u0441\u043b\u0430\u0432\u0430 \u0423\u0448\u0430\u043a\u043e\u0432\u0430 (  <a href=\"https:\/\/habrahabr.ru\/users\/juststas\/\" class=\"user_link\">JustStas<\/a>) \u2014 team lead \u0438\u0437 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 DataArt. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0421\u0442\u0430\u0441 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043e \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u0445 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0432\u043e\u0438\u0445 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u0442\u0435\u0433-\u0445\u0435\u043b\u043f\u0435\u0440\u043e\u0432 \u0432 ASP.NET Core. \u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u0438\u0437 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 <a href=\"http:\/\/habrahabr.ru\/search\/?q=%5B%23aspnetcolumn%5D&amp;target_type=posts\">#aspnetcolumn<\/a> \u2014 \u0412\u043b\u0430\u0434\u0438\u043c\u0438\u0440 \u042e\u043d\u0435\u0432<\/i><\/p><\/blockquote>\n<p>\u0412 <a href=\"https:\/\/habrahabr.ru\/post\/276277\/\">\u043f\u0440\u043e\u0448\u043b\u044b\u0439 \u0440\u0430\u0437<\/a> \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0432 ASP.NET Core 1.0 \u0442\u0435\u0433-\u0445\u044d\u043b\u043f\u0435\u0440\u044b. \u0412 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u0442\u0435\u0433-\u0445\u044d\u043b\u043f\u0435\u0440\u043e\u0432, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0443\u0447\u0430\u0441\u0442\u043a\u043e\u0432 HTML-\u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0438.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/habrastorage.org\/files\/57b\/2c3\/924\/57b2c39241ed46259315ba7d0d5177b1.jpg\"\/><\/div>\n<p>  <\/p>\n<h3>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h3>\n<p>  \u0424\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0442\u0435\u0433-\u0445\u044d\u043b\u043f\u0435\u0440\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u044e\u0431\u043e\u0439 \u043a\u043b\u0430\u0441\u0441, \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043e\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 <b>ITagHelper<\/b>.\u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043e\u0442 <b>ITagHelper<\/b> \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u043d\u0435 \u043d\u0430\u0434\u043e, \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u043e\u0442 \u043a\u043b\u0430\u0441\u0441\u0430 <b>TagHelper<\/b>, \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044f \u043c\u0435\u0442\u043e\u0434 Process \/ ProcessAsync, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u043e \u0445\u043e\u0434\u0443 \u0441\u0442\u0430\u0442\u044c\u0438.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-275313","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/275313","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=275313"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/275313\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=275313"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=275313"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=275313"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}