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; }
// ...
}