ASP MVC和Entity Framework中DropDownList的编译错误

时间:2013-05-23 14:33:00

标签: c# sql-server visual-studio-2010 asp.net-mvc-3 entity-framework

我正在使用C#和SQL Server 2005开发ASP .Net MVC 3应用程序。

我也在使用Entity Framework和Code First Method。

我有一个包含DropDownList的'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; } 

错误:

  

编译错误

     

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

我发现解决方案的问题。

我必须使用Entity Framework创建Model Genre的Controller并生成其视图,以便在基础中创建表Genre。

事实上,我的问题来源是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; } 
   }