如何使用标记帮助程序创建具有模型绑定的自定义编辑器

时间:2017-07-31 12:19:49

标签: c# asp.net-core asp.net-core-tag-helpers

我在多个视图中使用了以下代码:

Instant

我想从这个代码中创建可重用的TagHelper(或者替代ViewComponent),所以我会像这样使用它:

LocalDateTime ld1 = LocalDateTime.of(2015, Month.NOVEMBER, 1, 2, 0);
ZonedDateTime zd1 = ZonedDateTime.of(ld1, ZoneId.of("US/Eastern"));
LocalDateTime ld2 = LocalDateTime.of(2015, Month.NOVEMBER, 1, 3, 0);
ZonedDateTime zd2 = ZonedDateTime.of(ld2, ZoneId.of("US/Eastern"));
System.out.println(zd1);
System.out.println(zd2);
System.out.println(zd1.toInstant());
System.out.println(zd2.toInstant());

但是我无法将Instant从我的自定义标记助手传递到基础InputTagHelper。

我得到了:

  

ArgumentException:HTML字段的名称不能为null或为空。而是使用方法   Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.Editor或   Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper`1.EditorFor with a a   非空的htmlFieldName参数值。参数名称:表达式

在这一行:<input asp-for="@Model.Tags" class="form-control" data-provider="tagseditor" /> <!-- some additional code will be added in future -->

<tags-editor for="@Model.Tags" />
ModelExpression

1 个答案:

答案 0 :(得分:0)

问题的要点来自string GetImageDetailsHandler(..)本身不是模型的事实。您必须调用其ModelExpression属性。

所以在你的局部视图中:

Model

然后,您无法将输出标记名称设置为null,因为这会在您的视图中生成<!-- Views/Shared/TagHelpers/TagsEditor --> @model ModelExpression <input asp-for="@Model.Model" class="form-control" data-provider="tagseditor" /> 标记。我建议你把它改成&#34; div&#34;,或者任何容器适合你。

最后,由于输入标记是自动关闭的,因此您需要将输出标记模式更改为<null></null>以强制生成TagMode.StartTagAndEndTag,而不仅仅是<div></div>

总而言之,<div/>方法变为:

ProcessAsync