C# 为菜单创建一个创建视图,其中包含来自另一个菜品模型的下拉列表

C# 为菜单创建一个创建视图,其中包含来自另一个菜品模型的下拉列表,c#,view,model,asp.net-mvc-5,C#,View,Model,Asp.net Mvc 5,我是一名学生,需要申请入学。 这是一个餐馆的预订申请。 我想为菜单创建一个创建视图,您可以在其中为菜单命名,并选择此菜单需要的菜肴。这些盘子存放在另一个型号中。 我用的是这个问题:但不能让它发挥作用。 这是我的模型: public class MenuAddController { private BonTempsDbContext db = new BonTempsDbContext(); public Menu Menu { get; set; } public Di

我是一名学生,需要申请入学。 这是一个餐馆的预订申请。 我想为菜单创建一个创建视图,您可以在其中为菜单命名,并选择此菜单需要的菜肴。这些盘子存放在另一个型号中。 我用的是这个问题:但不能让它发挥作用。 这是我的模型:

public class MenuAddController
{
    private BonTempsDbContext db = new BonTempsDbContext();
    public Menu Menu { get; set; }
    public Dictionary<int, string> Voorgerechten { get; set; }
    public Dictionary<int, string> Hoofdgerechten { get; set; }
    public Dictionary<int, string> Nagerechten { get; set; }

    public MenuAddController() { }
    public MenuAddController(int id)
    {
        Menu = db.Menu
            .Where(e => e.id == id).SingleOrDefault();

        // instantiate your dictionaries

        foreach (var Voorgerecht in db.Voorgerecht)
        {
            Voorgerechten.Add(Voorgerecht.id, Voorgerecht.description);
        }
        foreach (var Hoofdgerecht in db.Hoofdgerecht)
        {
            Hoofdgerechten.Add(Hoofdgerecht.id, Hoofdgerecht.description);
        }
        foreach (var Nagerecht in db.Nagerecht)
        {
            Nagerechten.Add(Nagerecht.id, Nagerecht.description);
        }

    }
}
错误1“BonTempsMVC.Menu”不包含“添加”的定义


有人能帮我吗?

您的错误是因为
菜单控制器上没有
菜单属性,即您没有声明任何名为
菜单的内容。看起来您正在尝试使用MenuAddController上的菜单对象,但它显然不存在于MenuController中,因为它是一个完全不同的类

根据类的名称,您可能没有完全掌握MVC模式。您的
MenuAddController
看起来像是试图成为一个视图模型,也可能是一个存储库——我无法确定您的意图是什么。好消息是
菜单控制器就在那里。它唯一缺少的是将菜单(正在添加的内容)持久化/保存到数据库的方法

让我们从
MenusController
开始,因为您似乎离完成这项工作最近了。如前所述,数据访问是缺失的全部。我会考虑在控制器类中添加一个<代码> BoTeMPSDbConnices 属性,或者在添加(POST)动作(例如

)中至少实例化的一个属性。
public class MenusController
{
    private BonTempsDbContext db = new BonTempsDbContext();
    // actions and stuff
}
或者在行动本身,例如

[HttpPost]
public ActionResult Add(SomeViewModel vm)
{
    var db = new BonTempsDbContext();
    // check model state, etc
        // db.Menus.Add(vm.Menu)
}
我看到的唯一其他奇怪之处是GET Add操作。您的变量名表明您正在向它传递一个控制器,这在MVC上下文中毫无意义。我最常看到的约定是传递一个空的视图模型对象(如下所述)来设置要发布到操作发布版本的表单

这是不完整的(某种伪代码),因为你提到了它的家庭作业

现在转到其他部分。MenuAddController对对象或名称没有任何意义,所以让我们考虑一个新的对象,名为“代码> MunuAdVIEW模型< /代码>,它表示要添加的菜单对象的状态,即当用户提交窗体时,对象ASP.NET MVC将绑定您(您还未显示)。可能在所述视图模型对象上有一个菜单属性,这就是您计划保存到数据库的内容,例如

public class MenuAddViewModel
{
    public Menu Menu { get; set; }
    // ...
}
如果表单是以MVC可以自动绑定菜单属性的方式生成的,那么它可能就这么简单。这样,您可以在两个添加操作中重用MenuAddViewModel对象(几乎总是一件好事)。您将其传递给GET view,它有助于填充一个空表单,然后用户提交(POST)到“POST”视图并POOF,数据上下文可以将其保存到数据库或任何地方


我描述的新视图模型对象不需要数据上下文对象,因为它只需要知道菜单对象的状态。如果您需要组合菜单项,您可以将属性添加到所述视图模型对象中,然后从中开始。

很抱歉,我在这方面付出了很大努力,最终成功了,但与您建议的有所不同。还是非常感谢你的帮助。
[HttpPost]
public ActionResult Add(SomeViewModel vm)
{
    var db = new BonTempsDbContext();
    // check model state, etc
        // db.Menus.Add(vm.Menu)
}
public class MenuAddViewModel
{
    public Menu Menu { get; set; }
    // ...
}