无法从EF显示Viewmodel

时间:2012-03-05 11:14:20

标签: c# .net asp.net-mvc-3 entity-framework viewmodel

我正试图在MVC3上获得一个agrip但是我在一个Viewmodel上失败了,它应该显示一个List但是经常遇到字典错误。

  

传递到字典中的模型项是类型的   “marc_bew_online.ViewModels.StellenlisteViewModel”,但此字典需要“System.Collections.Generic.IEnumerable`1 [marc_bew_online.ViewModels.StellenlisteViewModel]”类型的模型项。

这是我的存储库的代码:

public class Stellenbeschr_Repo : IStellenBeschrRepository
{
    marc_bew_entities db = new marc_bew_entities();

    public IEnumerable<STELLENBESCHREIBUNGEN> ListAktuell()
    {

        DateTime dt1 = new DateTime(2011, 1, 1);
        var stelleBeschreibungAbDatum = (from stellebeschreibung in db.STELLENBESCHREIBUNGEN
                                         where DateTime.Compare((DateTime)stellebeschreibung.VON_DATUM, dt1) >= 0
                                         select stellebeschreibung).ToList();

        return stelleBeschreibungAbDatum;
    }

}

Controller + ViewModel:

 private IStellenBeschrRepository _repository;

    public Default1Controller()
        : this(new Stellenbeschr_Repo())
    { 

    }

    public Default1Controller(IStellenBeschrRepository repository)
    {
        _repository = repository;
    }
    #endregion

    public ActionResult Index()
    {
        return View(_repository.ListAktuell());
    }

    public ActionResult Stellenliste()
    {
        var viewModels = new StellenlisteViewModel { StellenListe = _repository.ListAktuell() };
        return View(viewModels);
    }
     public class StellenlisteViewModel
{
    public IEnumerable<STELLENBESCHREIBUNGEN> StellenListe { get; set; }

}

Viewpage提取:

 @foreach(var item in Model.StellenListe)
{
    <tr>
    <td>
        @Html.Display(item.STELLENBESCHREIBUNG);
    </td>
    </tr>
}

Viewpage目前正在显示“;”对于LINQ表达式找到的每个项目

我无法找到解决方案,以便在我的视图中显示列表。

2 个答案:

答案 0 :(得分:1)

问题很可能是您的观看代码。

确保您的模型声明为:

@model StellenlisteViewModel

而不是:

@model IEnumerable<StellenlisteViewModel>

修改

从它的声音中你可能会混淆一些事情。

您的页面将具有单一视图模型。在此视图模型上将显示您要显示的STELLENBESCHREIBUNGEN列表。

为此,请首先确保您的视图页面接受单一视图模型:

@model StellenlisteViewModel

其次,您希望在存储库中添加ToList()调用:

    var stelleBeschreibungAbDatum = (from stellebeschreibung in db.STELLENBESCHREIBUNGEN
                                     where DateTime.Compare((DateTime)stellebeschreibung.VON_DATUM, dt1) >= 0
                                     select stellebeschreibung).ToList();

第三,您的视图页面将如下所示:

@model StellenlisteViewModel


foreach(var item in Model.StellenListe)
{
    // output each individual item to the page
    // here you can access the individual properties on your STELLENBESCHREIBUNGEN, e.g.:
    <span>@item.Description</span>
}

抱歉,我目前无法访问MVC3,因此无法检查语法。

修改#2

您错误地使用了Display。您可以查看documentation

这也是DisplayFor()就是你要找的东西。

答案 1 :(得分:0)

您将返回单个项目而不是项目列表。您需要声明视图以获取marc_bew_online.ViewModels.StellenlisteViewModel(而不是IEnumerable)或返回viewmodel项的列表。