Próbuję uzyskać agrip na MVC3, ale nie udaje mi się na Viewmodel, który ma wyświetlać listę, ale stale napotyka błąd słownika.

Element modelu przekazany do słownika jest typu „marc_bew_online.ViewModels.StellenlisteViewModel”, ale ten słownik wymaga elementu modelu typu „System.Collections.Generic.IEnumerable`1[marc_bew_online.ViewModels.StellenlisteViewModel]”.

Oto kod do mojego repozytorium:

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

}

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

}

Wyciąg z oglądanej strony:

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

Wyświetlona strona aktualnie wyświetla „;” dla każdego przedmiotu znalezionego przez wyrażenie LINQ

Po prostu nie mogę znaleźć rozwiązania, aby wyświetlić listę w moim widoku.

1
Marco 5 marzec 2012, 15:14

2 odpowiedzi

Najlepsza odpowiedź

Problemem jest najprawdopodobniej kod widoku.

Upewnij się, że Twój model jest zadeklarowany jako:

@model StellenlisteViewModel

I nie:

@model IEnumerable<StellenlisteViewModel>

EDYTUJ

Sądząc po jego dźwiękach, możesz pomylić kilka rzeczy.

Twoja strona będzie miała jeden model widoku. W tym widoku modelu będzie lista STELLENBESCHREIBUNGEN, które chcesz wyświetlić.

Aby to zrobić, najpierw upewnij się, że Twoja strona widoku akceptuje jeden model widoku:

@model StellenlisteViewModel

Po drugie, chcesz dodać wywołanie ToList() w swoim repozytorium:

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

Po trzecie, Twoja strona widoku będzie wyglądać mniej więcej tak:

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

Przepraszamy, obecnie nie mam dostępu do MVC3, więc nie mogę sprawdzić składni.

Edytuj # 2

Używasz Display nieprawidłowo. Możesz sprawdzić dokumentację za to.

Podobnie jest z DisplayFor() jest tym, czego szukasz.

1
Henry 5 marzec 2012, 16:30

Zwracasz pojedynczy przedmiot, a nie listę przedmiotów. Musisz albo zadeklarować widok do pobrania marc_bew_online.ViewModels.StellenlisteViewModel (zamiast IEnumerable) lub zwrócić listę elementów widoku modelu.

0
GraemeMiller 5 marzec 2012, 15:21