我注意到一个奇怪的行为,其中Model
对下面的 asp.net 核心标签助手的前缀要求不一致。asp-for
不能接受Model
前缀但asp-items
必须有Model
前缀。我的头爆炸了。
@model ProblemVM
<select
asp-for="Problem.TagId"
asp-items="Model.Tags.ToSelectListItem(Model.Problem.TagId)"
/>
public class ProblemVM
{
public IEnumerable<Tag> Tags { get; set; }
public Problem Problem{ get; set; }
}
相关类。
public abstract class ISelectListItemable
{
[Key]
public int Id { get; set; }
[Required]
public virtual string Name { get; set; }
}
public class Tag: ISelectListItemable
{
[Display(Name = "Tag Name")]
public override string Name { get; set; }
}
public class Problem : ISelectListItemable
{
[Display(Name = "Problem Name")]
public override string Name { get; set; }
public int TagId { get; set; }
[ForeignKey(nameof(TagId))]
public virtual Tag Tag { get; set; }
}
public static IEnumerable<SelectListItem> ToSelectListItem<T>(this IEnumerable<T> items, int selectedValue)
where T : ISelectListItemable
{
return from item in items
select new SelectListItem
{
Text = item.Name,
Value = item.Id.ToString(),
Selected = item.Id.Equals(selectedValue)
};
}
Model
标签助手使用前缀的规则是什么?
文档确实说:
该
asp-for
属性值是一个特殊的情况下,并不需要一个型号前缀,其他标记辅助属性做(如asp-items
)
我看到的原因是这asp-for
将始终来自您的模型。但asp-items
可以是任何集合。它不一定来自您的模型。因此,如果您确实希望它来自您的模型,则需要告诉它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句