Visual studio 2010 MVC3下拉列表代码优先

Visual studio 2010 MVC3下拉列表代码优先,visual-studio-2010,asp.net-mvc-3,model,drop-down-menu,ef-code-first,Visual Studio 2010,Asp.net Mvc 3,Model,Drop Down Menu,Ef Code First,我有以下MVC3型号: public class Dine { [Key] [Display(Name = "Table Number")] public string TableNumber { get; set; } public List<SelectListItem> TableSelections { get; set; } [Display(Name = "Table Date")] [Required(ErrorMe

我有以下MVC3型号:

public class Dine
{
    [Key]
    [Display(Name = "Table Number")]
    public string TableNumber { get; set; }

    public List<SelectListItem> TableSelections { get; set; }


    [Display(Name = "Table Date")]
    [Required(ErrorMessage = "Please enter a date")]
    public DateTime Date { get; set; }

}
这是我的控制器:

public class RestaurantController : Controller
{
    TheDatabaseEntities db = new TheDatabaseEntities();
    //
    // GET: /Dine/

    public ActionResult Index()
    {   
        ViewBag.Tables = GetTableOptions();
        return View();
    }

    [HttpPost]
    public ActionResult Index(Restaurant model)
    {
        if (ModelState.IsValid)
        {

            return RedirectToAction("AddBookingComplete");
        }
        ViewBag.Tables = GetTableOptions();

        return View(model);
    }
    public ActionResult BookingComplete()
    {
        return View();
    }

    private List<Restaurant> GetTableOptions()
    {
        List<Restaurant> Tables = new List<Restaurant>();
        Table.Add(new Dine() { TableNumber = 1, TableSelection = "Table 1" });
        Table.Add(new Dine() { TableNumber = 2, TableOSelection = "Table" });
        Table.Add(new Dine() { TableNumber = 3, TableSelection = "Table" });
        Tables.Add(new Dine() { TableNumber = 4, TableSelection = "Table" });

        return Table;
        }
}
}

感谢您的帮助,因为我是MVC3的新手,谢谢

否,您没有MVC3型号。您有一个实体框架模型,您正试图将其用作MVC3模型。这不是一个微妙的区别

您正在向实体框架模型添加选择列表,因此实体框架正在尝试将其序列化到数据库。不要那样做。数据使用实体模型,MVC使用视图模型

您声称您所做的是基于教程的,但在该教程中没有看到他们使用实体框架模型。这是一个视图模型


如果您坚持在视图中使用EF模型,尽管最佳实践中说不要这样做,那么您需要通过ViewData或ViewBag传递SelectList,而不是在您的模型中

迈斯特人是对的。我猜您需要将下拉列表中的选定值保存到数据库中。如果是,请通过以下方式更改TableOption属性:

public string TableOption { get; set; }
然后,在控制器中,使用ViewBag将SelectList对象传递给视图,如图所示:

ViewBag.Tables = yourList;
在视图中,使用下拉帮助器填充“选择并绑定到”模型:

@Html.DropDownListFor(model => model.TableOption, new SelectList(ViewBag.Tables, "TableNo","TableOption")) 

最后,用后期操作方法保存模型。

谢谢您的回复,那么我如何将其制作成viewmodel呢?对不起,我是MVCok的新手,谢谢你们两位的帮助,假设我使用viewmodel这样做,那么我如何将值保存到数据库中?我通常是这样做的:如果ModelState.IsValid{db.Order.Addorder;db.SaveChanges;}您可以将EF模型用作视图模型。实际上,这是代码优先方法的优点之一。这里的错误是尝试将SelectListItem列表放入实体餐厅类中。EF将其解释为,餐厅表和SelectListItem表之间存在一对多关系,而您没有SelectListItem表。因此,如果你想使用你的EF模型作为视图模型,你必须按照我在回答中的建议去做。谢谢你的帮助,到目前为止,我已经按照你的建议去做了,但是出现了以下错误:无法将“System.Collections.Generic.List”类型转换为“System.Web.Mvc.SelectList”,我还更新了上面的问题以显示我当前的工作状态。您知道为什么会发生此错误吗?我猜GetTableTypes返回的是SelectList对象,而不是List。你有3个选择:1。更改GetTableTypes方法以返回SelectList对象。或2。从餐厅列表中获取SelectList:ViewBag.Tables=new SelectListGetTableTypes、TableNo、TableOption;或3。您可以直接在视图中执行相同操作:@Html.DropDownListFormodel=>model.TableOption,新建SelectListViewBag.Tables,TableNo,TableOption
ViewBag.Tables = yourList;
@Html.DropDownListFor(model => model.TableOption, new SelectList(ViewBag.Tables, "TableNo","TableOption"))