使用 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; }
因为您两次绑定到相同的模型属性。
任何指导将不胜感激。
答案 0 :(得分:0)
最后,答案很简单-因为我知道表达式类型,所以我可以简单地cast
如下:
var selectList = AspFor.Model as IEnumerable<SelectListItem>;
if (selectList == null) {
var msg = "CheckboxList tag helper attribute 'asp-for' must of type " +
"IEnumerable<Microsoft.AspNetCore.Mvc.Rendering.SelectListItem>!";
throw new Exception(msg);
}