我有以下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; }
}
}
List项值在控制器中定义,并且在按下提交时将下拉列表显示在视图中,以便将值保存到数据库中我得到以下错误:
有谁知道如何解决这个问题?
它基于本教程http://codeoverload.wordpress.com/2011/05/22/dropdown-lists-in-mvc-3/
由于
EDIT 我已经按照下面的建议得到了这个错误:无法将类型'System.Collections.Generic.List'转换为'System.Web.Mvc.SelectList'
这就是我的看法:
<td>@Html.DropDownListFor(model => model.TableSelection, (SelectList)ViewBag.Tables)</td>
这就是我在模型中的内容
public class Dine
{
[Key]
[Display(Name = "Table No")]
public int TableNo { get; set; }
public string TableOption { 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很新,谢谢!
答案 0 :(得分:0)
不,你没有MVC3模型。您有一个实体框架模型,您尝试将其用作MVC3模型。这不是一个微妙的区别。
您正在向Entity Framework模型添加选择列表,因此Entity Framework正在尝试将其序列化到数据库。不要那样做。使用实体模型进行数据,使用View Models for MVC。
你声称自己在做什么是基于一个教程,但在那个教程中你没有看到它们使用Entity Framework模型。这是一个视图模型。
如果您坚持在视图中使用EF模型(尽管最佳做法是不这样做),那么您需要通过ViewData(或ViewBag)传递SelectList,而不是在模型中传递。
答案 1 :(得分:0)
Mystere Man是对的。我猜你需要将下拉列表中的选定值保存到数据库中。如果是这样,请通过以下方式更改TableOption属性:
public string TableOption { get; set; }
然后,在你的控制器中使用ViewBag将SelectList对象传递给你的视图,如Mystery所说:
ViewBag.Tables = yourList;
在您的视图中使用下拉助手填充选择并绑定到模型:
@Html.DropDownListFor(model => model.TableOption, new SelectList(ViewBag.Tables, "TableNo","TableOption"))
最后将您的模型保存在后期操作方法中。