Visual studio 2010 MVC3下拉列表代码优先
我有以下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
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"))