Razor Pages 自定义标签助手 2 种方式绑定
Razor Pages Custom Tag Helper 2 Way Bind
我想在 razor 页面中创建一个自定义标签助手,它绑定到一个自定义模型,但该值没有被读回 post 上的模态,下面是我的 TagHelper 代码
[HtmlTargetElement("kenai-date", TagStructure = TagStructure.WithoutEndTag)]
public class Date : TagHelper
{
//public string Value { get; set; }
public ModelExpression AspFor { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
output.TagName = "input";
output.TagMode = TagMode.SelfClosing;
output.Attributes.Add("value", this.AspFor.Model);
}
}
我正在使用带有以下代码的 TagHelper
<kenai-date asp-for="DateValue" />
'DateValue' 是页面上的 public 属性,当第一次呈现页面时,如果我强制使用 OnPost,DateValue 的值在 TagHelper Input 元素中正确可见,该值已删除。
我已经将相同的内容应用到带有 asp-for set 的标准输入元素并且效果很好所以怀疑我在我的 TagHelper 中遗漏了一些东西。
Asp.net 名称为 attribute.You 的核心绑定模型数据使用自定义标签助手,因此它会像 <input value="xxx">
一样得到 html。所以当表单 post,你不能用name属性绑定模型数据,当OnPost处理程序中的return页面时,模型数据是null.You需要将name属性添加到<kenai-date asp-for="DateValue" />
。这是一个演示:
TestCustomTagHelper.cshtml:
<form method="post">
<kenai-date asp-for="DateValue" name="DateValue" />
<input type="submit" />
</form>
TestCustomTagHelper.cshtml.cs:
public class TestCustomTagHelperModel : PageModel
{
[BindProperty]
public string DateValue { get; set; }
public void OnGet()
{
DateValue = "sss";
}
public IActionResult OnPost()
{
return Page();
}
}
结果:
我想在 razor 页面中创建一个自定义标签助手,它绑定到一个自定义模型,但该值没有被读回 post 上的模态,下面是我的 TagHelper 代码
[HtmlTargetElement("kenai-date", TagStructure = TagStructure.WithoutEndTag)]
public class Date : TagHelper
{
//public string Value { get; set; }
public ModelExpression AspFor { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
output.TagName = "input";
output.TagMode = TagMode.SelfClosing;
output.Attributes.Add("value", this.AspFor.Model);
}
}
我正在使用带有以下代码的 TagHelper
<kenai-date asp-for="DateValue" />
'DateValue' 是页面上的 public 属性,当第一次呈现页面时,如果我强制使用 OnPost,DateValue 的值在 TagHelper Input 元素中正确可见,该值已删除。
我已经将相同的内容应用到带有 asp-for set 的标准输入元素并且效果很好所以怀疑我在我的 TagHelper 中遗漏了一些东西。
Asp.net 名称为 attribute.You 的核心绑定模型数据使用自定义标签助手,因此它会像 <input value="xxx">
一样得到 html。所以当表单 post,你不能用name属性绑定模型数据,当OnPost处理程序中的return页面时,模型数据是null.You需要将name属性添加到<kenai-date asp-for="DateValue" />
。这是一个演示:
TestCustomTagHelper.cshtml:
<form method="post">
<kenai-date asp-for="DateValue" name="DateValue" />
<input type="submit" />
</form>
TestCustomTagHelper.cshtml.cs:
public class TestCustomTagHelperModel : PageModel
{
[BindProperty]
public string DateValue { get; set; }
public void OnGet()
{
DateValue = "sss";
}
public IActionResult OnPost()
{
return Page();
}
}
结果: