【发布时间】:2019-06-17 06:40:41
【问题描述】:
我正在编写一组针对<form> 和<input> 标记(以及其他标记)的 ASP.Net Core 标记助手。我的<form> 标签助手定义了一个自定义属性,它想要传递给子元素的值。
我读过的所有文章都让这听起来很简单:父标签助手将值存储在context.Items 字典中,子标签从同一个字典中读取它。
这意味着子标签助手在父标签助手之后执行。但是,我发现在<form> 和<input> 标签助手的情况下,FormTagHelper 在InputTagHelper之后执行。
例如,考虑以下 HTML:
<form my-attr='Hello'>
<input asp-for='SomeProperty' />
</form>
我的表单标签助手:
public class FormTagHelper : TagHelper
{
public string MyAttr { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
Debug.WriteLine("<form>");
context.Items.Add("my-attr", MyAttr ?? "");
}
}
输入标签助手:
public class InputTagHelper : TagHelper
{
public override void Process(TagHelperContext context, TagHelperOutput output)
{
Debug.WriteLine("<input>");
var valueFromParentForm = context.Items["my-attr"].ToString();
}
}
我希望valueFromParentForm 是"Hello",但实际上它会抛出异常,因为 context.Items 字典是空的。
这是怎么回事,我可以做些什么来解决这个奇怪的、由内而外的执行顺序?
【问题讨论】:
标签: asp.net-core asp.net-core-tag-helpers