我想知道是否有人对 TagHelpers & Razor Components 的未来有任何看法或知识。我的问题仅与初始渲染有关。不在客户端使用 C# 代码。
我喜欢 razor 组件模型,因为基本组件是在标记中布局的,然后是代码。
这与生成标记的 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>
有人知道 Taghelpers 的长期发展方向吗?也许是朝着 Razor Component 的构造方式。抱歉,如果我的帖子不够清楚。我认真考虑过如何表达我的问题。我希望这不会令人困惑。