【问题标题】:Can't display Viewmodel from EF无法显示来自 EF 的 Viewmodel
【发布时间】:2012-03-22 20:48:35
【问题描述】:

我正在尝试在 MVC3 上获得优势,但我在应该显示列表但不断遇到字典错误的 Viewmodel 上失败了。

传入字典的模型项是类型 “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;
    }

}

控制器 + 视图模型:

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

}

浏览页面摘录:

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

查看页面当前显示“;”对于 LINQ 表达式找到的每个项目

我只是找不到让列表显示在我的视图中的解决方案。

【问题讨论】:

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


    【解决方案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() 就是你要找的东西。

    【讨论】:

    • 但我希望将其填充为 IEnumerable,以便将其填充到表格中。
    • @user1249641 你能发布你的视图页面吗?
    • 目前还没有 ViewPage,因为我无法在 View 中填充数据。我无法处理模型中的任何属性,例如描述;开始日期,结束日期;参考号等。
    • 但无论如何都是这样:对不起......“@”阻止我以某种方式发布视图页面......我不习惯stackoverflow
    • code @foreach(模型中的变量项){ @Html.LabelFor(item.PROPERTY); } code 但我无法选择任何属性。我唯一可以选择的项目是“StellenListe”
    【解决方案2】:

    您返回的是单个项目而不是项目列表。您要么需要声明视图采用 marc_bew_online.ViewModels.StellenlisteViewModel(而不是 IEnumerable),要么返回视图模型项的列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-28
      • 2021-11-23
      • 2017-11-20
      • 1970-01-01
      相关资源
      最近更新 更多