模型内的模型集合

时间:2016-05-27 14:20:26

标签: c# asp.net asp.net-mvc

我是asp.net mvc的新手。而且我遇到了一些问题而且还不知道如何解决它。我用Google搜索,发现了一些有用的东西,但它们并没有帮助我解决我的问题。所以,让我们从现在开始:

public partial class Dish
    {
        public Dish()
        {
            PortionFood = new HashSet<PortionFood>();
        }    
        [Key]
        public int Id { get; set; }
        [Required]
        [StringLength(50)]
        public string Name { get; set; }
        [JsonIgnore]    
        public virtual DishCategory DishCategory { get; set; }
        [JsonIgnore]
        public virtual ICollection<PortionFood> PortionFood { get; set; }
    }
}
// Food class in a separate file
public partial class Food
    {
        public Food()
        {
            PortionFood = new HashSet<PortionFood>();
        }
        [Key]
        public int Id { get; set; }
        [Required]
        [StringLength(50)]
        public string Name { get; set; }
        public float Proteins { get; set; }
        public float Fat { get; set; }
        public float Carbs { get; set; }
        public float Ccal { get; set; }
        public float? Sugar { get; set; }
        public float? AmountOfWater { get; set; }
        [ForeignKey("FoodCategory")]
        public int IdFoodCategory { get; set; }
        [ForeignKey("FoodConsistencyType")]
        public int IdFoodConsistencyType { get; set; }
        [JsonIgnore]
        public virtual FoodCategory FoodCategory { get; set; }
        [JsonIgnore]
        public virtual ICollection<PortionFood> PortionFood { get; set; }
    }
}
// Portion Food Class in a separate file 
public partial class PortionFood
    {
        [Key]
        [Column(Order = 0)]
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        [ForeignKey("Food")]
        public int IdFood { get; set; }
        [Key]
        [Column(Order = 1)]
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        [ForeignKey("Dish")]
        public int IdDish { get; set; }

        public float Amount { get; set; }

        public bool IsDeleted { get; set; }

        public virtual Dish Dish { get; set; }

        public virtual Food Food { get; set; }
    }
}

PortionFood只是指明什么食物在哪个菜里面。 现在我有类菜和食物的视图,我能够添加这两个类的新对象(通过填写视图字段和按下按钮)到DB,我能够编辑现有的Dish&amp;&amp; ;现有的食物。查看所有现有Food&amp;&amp; amp;菜对象。
我想要的是什么:
添加/编辑Dish时,必须有可能添加一个与当前Dish相关的PortionFood对象(我们正在编辑或添加)。只需在下拉列表中选择FoodId,设置金额并单击按钮即可。必须将PortionFood对象插入相关Dish和相关食物的PotionFood集合中 我该如何实施呢? 如果有任何不明确的内容写在评论中,我会尝试说清楚。
感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我想我现在看到你的问题,你需要从ICollection填充而不是它。在这种情况下,我建议使用List<SelectListItem>,因为您可以使用DropDownListFor html helper。 例如:

public class ViewModel {
    private readonly List<PortionFood> _foods;

    [Display(Name = "Pick a portion")]
    public int SelectedFoodItem { get; set; }

    public IEnumerable<SelectListItem> FoodPortionItems
    {
        get { return new SelectList(_foods, "Id", "Name"); }
    }
}

public class PortionFood {
    public int Id { get; set; }
    public string Name { get; set; }
}

//In your Razor View:
@Html.LabelFor(m => m.SelectedFoodItem)
@Html.DropDownListFor(m => m.SelectedFoodItem, Model.FoodPortionItems)

这应该可以帮助您填充下拉列表。

PS:我通常喜欢在这里使用ViewModels而不是Models,这样你在View中只有你需要的东西