0

Ich arbeite mit dem Kendo UI Grid und versuche, an eine List<T> in meinem View Model zu binden. Leider erhalte ich ständig eine NullReferenceException auf Model.DeliveredLoads. Ich habe einen Haltepunkt in meinem Controller gesetzt, und beim Debuggen wird weder die Controller-Methode geladen, noch wird der Breakpoint getroffen.Kendo UI MVC Grid ViewModel Binding NullReference

Es scheint, als ob das Gitter versucht, zu binden, bevor die Daten im View-Modell verfügbar sind, daher der Fehler.

Hier ist, was ich in meiner ViewModel.cs Datei:

using System.Collections.Generic; 
using SmartAppData; 
using SmartAppData.Services; 

namespace SmartAppV1.Models 
{ 
    public class DispatchBoardViewModel 
    { 
     public List<OrdHeader> OrderHeaders 
     { 
      get 
      { 
       var service = new OrderService(); 
       var orders = service.GetOrders(); 
       return (List<OrdHeader>)orders; 
      } 
     } 
     public OrderTmsStatus OrderTmsStatus => new OrderTmsStatus(); 

     private string _defaultOrderTmsStatus; 
     public string DefaultOrderTmsStatus 
     { 
      get { return OrderTmsStatus.Planned.ToString(); } 
      set { _defaultOrderTmsStatus = value; } 
     } 

     public List<Load> DeliveredLoads { get; set; } 

    } 
} 

Mein Controller-Aktion:

public ActionResult DispatchBoard() 
{ 
    var service = new OrderService(); 
    var loadService = new LoadService(); 

    var viewModel = new DispatchBoardViewModel(); 
    viewModel.DefaultOrderTmsStatus = OrderTmsStatus.New.ToString(); 

    // Get list of delivered loads (grid #4) 
    viewModel.DeliveredLoads = loadService.GetLoadsByBookedByIdByTmsStatus(110, LoadTmsStatus.Delivered.ToString()); 

    return View(viewModel); 
} 

Und schließlich meine Ansicht:

@model SmartAppV1.Models.DispatchBoardViewModel 

<div class="section group"> 
    <div id="col4" class="col span_1_of_4 fullContainerHeight"> 
     <div class="commandBar"> 
      <i class="fa fa-expand fa-inverse floatRight clickPointer" onclick="expandColumn(this);"></i> 
     </div> 
     @(Html.Kendo().Grid(Model.DeliveredLoads) 
      .Name("Grid_4_of_4") 
      .Columns(columns => 
      { 
       columns.Bound(p => p.LoadId).Title("Load Id"); 
      }) 
      .Pageable() 
      ) 
     ) 
    </div> 
</div> 

Da ich Wenn ich die Daten in das Ansichtsmodell lege (und nicht große Datenmengen vorwegnehme - im Allgemeinen nicht mehr als 30 Zeilen), sehe ich nicht, warum Ich brauche keine JSON-Methode, um die Daten zu laden/seiten/sortieren.

Ich verstehe einfach nicht, warum das Gitter versucht zu binden, bevor das Modell vollständig hydratisiert ist.

Alle Ideen oder Vorschläge würden sehr geschätzt werden!

Danke, Ric

Antwort

0

Es funktioniert nicht so. Während Sie das Gitter initialisieren, sagen Sie, dass das Gitter das Modell "Model.DeliveredLoads" verwenden wird. Es ist nur für Modellbindung. Es wird zu diesem Zeitpunkt keine Daten enthalten. Sie müssen die Lesemethode für das Raster aufrufen. Dann bedeutet es, dass Sie die Daten von der Lese-Methode vom Controller lesen werden.

@model SmartAppV1.Models.DispatchBoardViewModel 

<div class="section group"> 
<div id="col4" class="col span_1_of_4 fullContainerHeight"> 
    <div class="commandBar"> 
     <i class="fa fa-expand fa-inverse floatRight clickPointer" onclick="expandColumn(this);"></i> 
    </div> 
    @(Html.Kendo().Grid(Model.DeliveredLoads) 
     .Name("Grid_4_of_4") 
     .Columns(columns => 
     { 
      columns.Bound(p => p.LoadId).Title("Load Id"); 
     }) 
     .Pageable() 
     .DataSource(dataSource => dataSource.Ajax().Read(read => read.Action("ActionName", "ControllerName"))) 
     ) 

</div>