【问题标题】:Compilation error of DropDownList in ASP MVC and Entity FrameworkASP MVC和Entity Framework中DropDownList的编译错误
【发布时间】:2013-05-23 14:32:59
【问题描述】:

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

我也在使用实体框架和代码优先方法。

我有一个视图“应用程序”,其中包含这样的 DropDownList:

<%@ 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; } 

错误:

编译错误

描述:编译资源时出错 需要为该请求提供服务。请查看以下具体内容 错误详情并适当修改您的源代码。

【问题讨论】:

  • 您认为包含“特定错误详细信息”可能不重要吗?您已经问了足够多的这些问题了,您应该知道人们需要什么样的信息来回答您的问题。
  • @MystereMan 我现在已经解决了这个问题,但是谢谢,,,这是我的数据库中的一个错误:)
  • 然后你应该发布问题所在,解决方案,并将你自己的答案标记为已接受的答案,这样人们就不会一直试图解决你的问题。这只是普通的礼貌。
  • 是的,对不起,我只是忙于解决问题

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


【解决方案1】:

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

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

【讨论】:

  • 我已经试过了,,,即使我想把它作为第二种方法放在我的问题中,但没有成功!
  • 我不确定你的意思?您已经尝试了上面的代码,但它仍然不起作用?您需要发布您的整个错误消息,以便我们可以弄清楚发生了什么......
  • 这是我提出您的方法并坚持下去时的错误,我将编辑我的问题并将其作为第二种方法:(169,10):错误 3004:从第 169 行开始映射片段时出现问题: 没有为 Set FlowViewModels 中的属性 FlowViewModel.GenreItems 指定映射。在以下情况下,具有密钥 (PK) 的实体将不会往返:实体类型为 [MvcApplication2.Models.FlowViewModel]
【解决方案2】:

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

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

事实上,我的问题的根源是 db (private GammeContext db = new GammeContext();) 在执行中始终被视为 NULL,因为 base 中没有 table Genre。

所以视图的代码是:

<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; } 
   }

【讨论】:

    猜你喜欢
    • 2019-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-21
    • 1970-01-01
    • 2016-05-16
    相关资源
    最近更新 更多