【发布时间】:2019-04-12 09:26:02
【问题描述】:
使用 ASP.NET Core 2.2 我正在尝试构建一个 Tag Helper 将绑定到代表集合的 ModelExpression SelectListItems。然后我希望能够访问和遍历列表中包含的SelectListItems。
在代码方面,它看起来像这样......
[HtmlTargetElement("check-box-list", Attributes = "asp-for)]
public class CheckboxListTagHelper : TagHelper
{
// Where the model is an IEnumerable<SelectItemList>
[HtmlAttributeName("asp-for")]
public ModelExpression AspFor { get; set; }
public override async Task ProcessAsync(
TagHelperContext context, TagHelperOutput output)
{
// I want to be able to reference the IEnumerable<SelectListItem>
// represented by the model
var modelItems = AspFor.Model as IEnumerable<SelectListItem>; // WRONG!
...
}
}
我假设我需要使用 ModelExpression.MetaData 或 ModelExpression.ModelExpolorer 属性,但我找不到任何可以指引我正确方向的信息。
一个不雅的解决方法是提供与附加属性相同的模型:
[HtmlAttributeName("select-item-list")]
public IEnumerable<SelectListItem> SelectItemList { get; set; }
但这在视图中看起来很乱:
<check-box-list
asp-for="SelectedAuthorityLevels"
checkbox-list="Model.SelectedAuthorityLevels" />
因为您绑定到同一个模型属性两次。
任何指导将不胜感激。
【问题讨论】:
-
您是否尝试将属性名称从
AspFor更改为public ModelExpression For { get; set; }之类的名称?
标签: c# asp.net-core tag-helpers asp.net-core-tag-helpers