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.
2 odpowiedzi
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ę a> za to.
Podobnie jest z DisplayFor()
jest tym, czego szukasz.
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.
Podobne pytania
Nowe pytania
c#
C # (wymawiane „patrz ostro”) jest językiem programowania wysokiego poziomu, statycznie typowanym, wieloparadygmatowym opracowanym przez firmę Microsoft. Kod C # zwykle jest przeznaczony dla rodziny narzędzi Microsoft .NET i czasów wykonywania, do których należą między innymi .NET Framework, .NET Core i Xamarin. Użyj tego tagu w przypadku pytań dotyczących kodu napisanego w C # lub C # formalnej specyfikacji.