Мне интересно, есть ли у кого-нибудь какие-либо взгляды или знания о том, где будущее будущее компонентов TagHelpers & Razor. У меня вопрос только по поводу начального рендеринга. Не использую код C # на стороне клиента.
Мне нравится модель работы бритвенного компонента в том смысле, что базовый компонент размечен в разметке, тогда есть код позади.
Этосравнивается с TagHelpers, генерирующим разметку.
Возьмите этот компонент метки TagHelper, который я использую, например ...
using Microsoft.AspNetCore.Razor.TagHelpers;
namespace gMIS.TagHelpers
{
[HtmlTargetElement("glabel", TagStructure = TagStructure.WithoutEndTag)]
public class glabelTagHelper : TagHelper
{
#region Attributes
[HtmlAttributeName("id")]
public string id { get; set; }
[HtmlAttributeName("class")]
public string cls { get; set; }
[HtmlAttributeName("xy")]
public string xy { get; set; }
[HtmlAttributeName("style")]
public string style { get; set; }
[HtmlAttributeName("value")]
public string value { get; set; }
#endregion Attributes
public override void Process(TagHelperContext context, TagHelperOutput output)
{
//START with the container DIV
output.TagName = "div";
output.TagMode = TagMode.StartTagAndEndTag;
if (id != null) output.Attributes.Add("id", id);
if ((xy != null) && (xy != null)) output.Attributes.Add("class", "xy" + xy);
if (style != null) output.Attributes.Add("style", "display:inline-block; font-weight:bold;" + style); //*** Any subsequent WIDTH passed in with supercede the default provided here!
else output.Attributes.Add("style", "display:inline-block; font-weight:bold;");
if (cls != null) output.Attributes.Add("class", cls);
//Insert data value
if (value != null) output.Content.AppendHtml(value);
}
}
}
Мне бы понравилось, если бы это можно было кодировать как-то так ...
<div id="{inject id}" class="{inject class}" style="{inject style}">{inject text}</div>
... вместо того, чтобы использовать C # для создания базовой разметки.
output.TagName = "div";
output.TagMode = TagMode.StartTagAndEndTag;
Затем взаимодействующий код (только на стороне сервера) завершает настройку базовой разметки компонента. Таким образом, вы можете видеть базовую разметку, а не более сложную для чтения и визуализации конструкцию разметки в C #.
С базовой меткой это кажется не слишком выгодным, но с более сложными компонентами,возможность визуализации разметки была бы настоящим благом.
<div class="{inject class}" id="{inject id}" style="{inject style}">
<input name="{inject name}" id="{inject id}" style="{inject style}" type="text" value="-4" data-val-required="&nbsp;Req!" data-val="true">
<input id="{inject id}" style="{inject style}" type="text" placeholder="Start typing here to search..." autocomplete="off">
<select id="{inject id}" style="{inject style}" size="1">
</select>
<script type="text/javascript">
$(document).ready(function () { $('#ext_IT_Task_Reported_By_ID').glookupInit('/TagHelpers/InternalContactLookup'); });</script>
<span class="field-validation-valid" data-valmsg-replace="true" data-valmsg-for="{inject id}"></span>
</div>
Кто-нибудь знает, куда Тагхелперс движется в долгосрочной перспективе? Навстречу Бритве Компонентный способ строительства возможно. Извиняюсь, если мой пост недостаточно ясен. Я много думал о том, как сообщить свой вопрос. Надеюсь, это не смущает.