asp.net 核心标签助手的模型前缀要求不一致

金正恩

我注意到一个奇怪的行为,其中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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章