Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 模型内的模型集合_C#_Asp.net_Asp.net Mvc - Fatal编程技术网

C# 模型内的模型集合

C# 模型内的模型集合,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我是asp.NETMVC的新手。我遇到了一些问题,还不知道如何解决。我在谷歌上搜索,发现了一些有用的东西,但它们并没有帮助我解决问题。让我们从我现在所拥有的开始: public partial class Dish { public Dish() { PortionFood = new HashSet<PortionFood>(); } [Key] public i

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

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=newhashset();
}    
[关键]
公共int Id{get;set;}
[必需]
[长度(50)]
公共字符串名称{get;set;}
[JsonIgnore]
公共虚拟目录目录目录{get;set;}
[JsonIgnore]
公共虚拟ICollection PortionFood{get;set;}
}
}
//食品类在一个单独的文件中
公共部分类食品
{
公共食品
{
PortionFood=newhashset();
}
[关键]
公共int Id{get;set;}
[必需]
[长度(50)]
公共字符串名称{get;set;}
公共浮点数{get;set;}
公共浮点Fat{get;set;}
公共浮动Carbs{get;set;}
公共浮点Ccal{get;set;}
公共浮动?Sugar{get;set;}
公共浮点数?AmountOfWater{get;set;}
[外键(“食品类别”)]
public int IdFoodCategory{get;set;}
[ForeignKey(“FoodConsistencyType”)]
public int IdFoodConsistencyType{get;set;}
[JsonIgnore]
公共虚拟FoodCategory FoodCategory{get;set;}
[JsonIgnore]
公共虚拟ICollection PortionFood{get;set;}
}
}
//在单独的文件中分配食物类
公共部分类食品
{
[关键]
[第列(顺序=0)]
[数据库生成(DatabaseGeneratedOption.None)]
[外键(“食品”)]
public int IdFood{get;set;}
[关键]
[第列(顺序=1)]
[数据库生成(DatabaseGeneratedOption.None)]
[外键(“盘”)]
公共int-IdDish{get;set;}
公共浮动金额{get;set;}
公共布尔被删除{get;set;}
公共虚拟盘碟{get;set;}
公共虚拟食品{get;set;}
}
}
PortionFood只是指定在哪个盘子里有多少食物。 现在我有了Dish和Food类的视图,我可以将这两个类的每个类的新对象(通过填充视图字段并按下按钮)添加到DB,我可以编辑现有的Dish和现有的Food。请参见所有现有食物和菜肴对象的列表。
我想要什么:
添加/编辑一道菜时,必须可以添加一个与当前菜相关的PortionFood对象(我们正在编辑或添加)。只需在下拉列表中选择一个FoodId,设置一个数量并单击按钮。必须将PortionFood对象插入到相关菜肴和相关食品的PotionFood集合中
如何实现它?
如果有任何未保留的内容,请写在评论中,我会尽力澄清。

谢谢你的帮助

我想我现在看到了您的问题,您需要从ICollection填充到它。在这种情况下,我建议使用
List
,因为您可以使用dropdownlistforhtml助手。 例如:

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)
公共类视图模型{
私人只读清单(食品);;
[显示(Name=“选择一部分”)]
public int SelectedFoodItem{get;set;}
公共可数餐饮部
{
获取{returnnewselectlist(_,“Id”,“Name”);}
}
}
公营食品{
公共int Id{get;set;}
公共字符串名称{get;set;}
}
//在你看来:
@LabelFor(m=>m.SelectedFoodItem)
@Html.DropDownListFor(m=>m.SelectedFoodItem,Model.FoodPortionItems)
这将有助于填充下拉列表


PS:我通常喜欢在这里使用ViewModels,而不是Models,这样您在视图中只需要所需的内容

答案多少取决于您希望用户体验如何。我认为AJAX请求在这里会很好。如果您选择不使用AJAX,则必须提交整个表单;这更容易编码,但每次您要提交PortionFood时,整个页面都会刷新。@FailedUnitTest,现在我更喜欢更简单的,因为我没有太多时间在这种情况下生成下拉列表,当用户选择并提交整个内容时,用下拉列表项填充ICollection(您将无法将下拉列表值直接绑定到ICollection,因此请将其绑定到单个值)。您必须将ICollection存储在某个位置,以便每次用户提交时您都可以添加到其中。@FailedUnitTest我不知道如何使用ICollection条目填充下拉列表?。在我的下拉列表中,我选择食物,并在下拉列表附近的某个字段中设置数量,然后在我的Dish控制器中按下按钮时按下按钮呃,一个动作开始它的工作。这个动作必须从一个视图接受一个PortionFood元素作为它的参数。据我所知