asp.net MVC和实体框架下拉列表的编译错误

本文关键字:下拉列表 编译 错误 框架 实体 net MVC asp | 更新日期: 2023-09-27 18:14:57

我正在使用c#和SQL Server 2005开发一个asp.net MVC 3应用程序。

我也使用实体框架和代码第一方法。

我有一个视图'Application',它包含一个下拉列表,像这样:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MvcApplication2.Models.FlowViewModel>" %>
<h2>Application</h2>
  <form id="form1" runat="server">
  <h2><%= Html.Encode(ViewData["Message"]) %> </h2>
    <div>         
      <%:Html.Label("Type :")%><%: Html.DropDownListFor(model => model.SelectedGenre, Model.GenreItems)%>
    </div>

当我试图访问视图的页面时,我有一个编译错误:

编译错误

描述:在编译资源期间发生错误服务此请求所需。请查看以下具体内容错误详细信息,并适当修改源代码。

这是控制器的一部分:

[HttpGet]
public ActionResult Application(Genre genre)
{
    var vv = new FlowViewModel();
    vv.GenreItems = db.Genres.ToList();
    return View(vv);
}

,这是模型的一部分:

public class FlowViewModel
{
    [Key]
    public string IDv { get; set; }
    public List<Genre> GenreItems { get; set; }
    public string SelectedGenre { get; set; } 
}

第二步:

控制器:

[HttpGet]
    public ActionResult Application(Genre genre)
    {
        var vv = new FlowViewModel();
        vv.GenreItems = new SelectList(db.Genres.ToList(), "ID_G", "ID_G");

        return View(vv);
    }

视图:

<div>         
         <%:Html.Label("Type :")%><%: Html.DropDownListFor(model => model.SelectedGenre, new SelectList(Model.GenreItems,"ID_G","ID_G")%>
   </div>

模型:

[NotMapped]
 public SelectList GenreItems { get; set; }
 public string SelectedGenre { get; set; } 
错误:

编译错误

描述:在编译资源期间发生错误服务此请求所需。请查看以下具体内容错误详细信息,并适当修改源代码。

asp.net MVC和实体框架下拉列表的编译错误

DropDownListFor不需要一个SelectList填充值?我的意思是,你的下拉列表如何知道Genre对象的哪个属性用于Value哪个用于Text?您正在传递一个List,但您需要将该列表转换为SelectList。这可能不是你的错误的原因,但它肯定是…

 <%: Html.DropDownListFor(model => model.SelectedGenre, new SelectList(Model.GenreItems, "ValueFieldName", "TextFieldName"))%>

我找到了问题的解决方案。

我必须创建模型类型的控制器,并使用实体框架生成其视图,以便在基础中创建表类型。

事实上,我的问题的来源是db (private GammeContext db = new GammeContext();),在执行中总是被视为NULL,因为在基础中没有表类型。

视图的代码是:

<div>         
         <%:Html.Label("Type :")%><%: Html.DropDownListFor(model => model.SelectedGenre, Model.GenreItems)%>
   </div>

和控制器:

[HttpGet]
        public ActionResult Application(Genre genre)
        {
            var vv = new FlowViewModel();
            vv.GenreItems = new SelectList(db.Genres.ToList(), "ID_G", "ID_G");

            return View(vv);
        }

,这是模型:

public class FlowViewModel
    {
        [Key]
        public string IDv { get; set; }
        [NotMapped]
        public SelectList GenreItems { get; set; }
          public string SelectedGenre { get; set; } 
   }