0

我有以下 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; }

}

}

列表项值在控制器中定义,下拉列表在视图中显示良好,仅当按下提交以将值保存到数据库时,我收到以下错误:

有谁知道如何解决这个问题?

它基于本教程http://codeoverload.wordpress.com/2011/05/22/dropdown-lists-in-mvc-3/

谢谢

编辑我遵循了下面的建议并收到此错误:无法将类型'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 很陌生,谢谢!

4

2 回答 2

0

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

public string TableOption { get; set; }

然后,在您的控制器中,使用 ViewBag 将 SelectList 对象传递给您的视图,正如 Mystery 所说:

ViewBag.Tables = yourList;

并在您的视图中使用下拉帮助程序来填充选择并绑定到模型:

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

最后将您的模型保存在您的后期操作方法中。

于 2012-04-22T22:52:58.613 回答
0

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

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

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

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

于 2012-04-22T18:31:32.207 回答