我是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集合中
我该如何实施呢?
如果有任何不明确的内容写在评论中,我会尝试说清楚。
感谢您的帮助!
答案 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中只有你需要的东西