2016-09-24 1 views
0

Mir ist bewusst, dass Sie nicht auf einen Wert per Index zugreifen können, wenn Sie eine IEnumerable<T> verwenden.Verwenden einer Razor For-Schleife in einem IEnumerable ViewModel - Probleme beim Zugriff nach Index

Hier ist meine Ansicht:

@model IList<CustomerViewModel> 

@for (int i = 0; i < Model.Count - 1; i++) 
{ 
    @Model[i].Name 
} 

Beachten Sie, wie ich die ViewModel vom Typ vornehmen müssen IList um Index zu verwenden.

Hier ist mein Controller:

public IActionResult Index() 
{ 
    IList<Customer> customers = _ctx.Reviews.GetCustomers().ToList(); 

    return View(customers.Select(c => Mapper.Map<CustomerViewModel>(c))); 
} 

ich eine Störung erhalte, die sagen, dass das Modellelement in die ViewDataDictionary weitergegeben falsch ist.

Das macht Sinn, weil ich denke, dass ein IQueryable geht? Aus diesem Grund versuche ich, die ViewModel vom Typ IEnumerable zu behalten und trotzdem eine for-Schleife zu verwenden.

+1

'return View;' (customers.Select (c => Mapper.Map (c)) ToList().). Aber Sie können immer eine 'foreach'-Schleife in der Ansicht verwenden, wenn Sie keine Formularsteuerelemente erstellen (oder wenn Sie eine' EditorTemplate' verwenden) –

+0

wäre eine '@ foreach' eine Option für Sie? Schauen Sie sich auch den Fall Ihrer Variablen an (Klein- und Großbuchstaben "m") – khlr

+0

@khlr Ich denke, ich könnte eine foreach verwenden ... Mein ultimatives Ziel ist es, eine CSS-Klasse zu jedem anderen Element in der Liste hinzufügen zu können beim Schleifen. Ich dachte mir, ich müsste irgendwie den Index dazu benutzen. –

Antwort

0

Ihr Modell erwartet den Typ IList<CustomerViewModel>, wobei Sie in Ihrer Methode Index als Modell IEnumerable<CustomerViewModel> übergeben werden. IEnumerable<T> kann nicht automatisch zu IList<T> konvertiert werden, so erhalten Sie einen Fehler.

Einfache Möglichkeit, das Problem zu beheben, ist Ihr Modell in eine Liste in Index Methode zu konvertieren. Sie können LINQ Methode ToList() dafür verwenden:

public IActionResult Index() 
{ 
    IList<Customer> customers = _ctx.Reviews.GetCustomers().ToList(); 

    // The result is converted to List using method ToList() 
    return View(customers.Select(c => Mapper.Map<CustomerViewModel>(c)).ToList()); 
} 
Verwandte Themen