2017-04-02 3 views
1

Ich habe ein Problem beim Anzeigen meiner Daten.ASP.NET Core - Anzeigen von Datenfehler

Was ich versuche, auf meiner Seite zu erreichen, ist, dass ich alle von ihnen in einer Ansicht für die Anzeige von Daten und CRUD-Operation mit Bootstrap legen.

ich diese Art von Fehler empfangen:

image

Auch wurde vorgeschlagen, dass ich neue() verwenden, da es festgestellt, dass ich eine neue Instanz erstellen sollte, aber ich weiß nicht, wo Setzen Sie es ab. Ich habe versucht, es in mein Modell wie public lstEmployee = new IEnumerable<Employee> { get; set; } zu setzen und es scheint überhaupt nicht zu funktionieren.

Dies ist mein Code:

Modell:

using PEMCOLoan.DAL.Entities.Models; 
namespace prjPEMCOLoan.Models 
{ 
    public class ModelEmployee 
    { 
     public IEnumerable<Employee> lstEmployee { get; set; } 
     public Employee employees { get; set; } 
    } 
} 

Ausblick:

@model prjPEMCOLoan.Models.ModelEmployee 
 

 
@{ 
 
    ViewBag.Title = "List of Employees"; 
 
} 
 
<form class="navbar-form navbar-right" style="margin-bottom: 10px;"> 
 
    <div class="form-group"> 
 
     <input type="text" class="form-control" placeholder="Search"> 
 
    </div> 
 
    <button type="submit" class="btn btn-default">Submit</button> 
 
</form> 
 

 
<p> 
 
    <h3>List of Employees</h3> 
 
    <button type="button" class="btn btn-info btn-sm openAdd" data-toggle="modal" data-target="#myModal2"><span class="glyphicon glyphicon-floppy-save" style="vertical-align:middle;margin-top: -5px"></span> Add</button> 
 
</p> 
 

 
<table class="table table-hover table-striped"> 
 
    <tr> 
 
     <th>ID Employee</th> 
 
     <th>Full Name</th> 
 
     <th>Contact Number</th> 
 
     <th>Position</th> 
 
     <th>Action</th> 
 
    </tr> 
 

 
    @foreach (var item in Model.lstEmployee) 
 
    { 
 
     <tr> 
 
      <td>@Html.DisplayFor(modelItem => item.EmployeeId)</td> 
 
      <td>@Html.DisplayFor(modelItem => item.Fname) @Html.DisplayFor(modelItem => item.Lname)</td> 
 
      <td>@Html.DisplayFor(modelItem => item.PhoneNumber)</td> 
 
      <td>@Html.DisplayFor(modelItem => item.Position)</td> 
 
      <td> 
 
       <a class="btn btn-primary btn-sm" asp-controller="Employee" asp-action="Details" asp-route-id="@item.EmployeeId"><span class="glyphicon glyphicon-dashboard" style="vertical-align:middle;margin-top: -5px"></span> Details</a> 
 
       <button type="button" class="btn btn-warning btn-sm openEdit" data-toggle="modal" data-target="#myModal" data-emp-id="@item.EmployeeId"><span class="glyphicon glyphicon-edit" style="vertical-align:middle;margin-top: -5px"></span> Edit</button> 
 
       <button type="button" class="btn btn-danger btn-sm openDiag" data-toggle="modal" data-target="#myModal" data-emp-id="@item.EmployeeId"><span class="glyphicon glyphicon-trash" style="vertical-align:middle;margin-top: -5px"></span> Delete</button> 
 
      </td> 
 
     </tr> 
 
    } 
 
</table>

Controller:

[HttpGet] 
public async Task<IActionResult> Index() 
{ 
    var getAllEmployees = await _Context.Employee.ToListAsync(); 
    return View(getAllEmployees); 
} 
+0

Der Fehler ist ziemlich klar: Ihr Modell sagt, es will ein ModelEmployee-Objekt, Sie geben ihm eine Liste von Mitarbeitern. Sie müssen eine Instanz der Modellklasse erstellen, die Liste darin einfügen und diese an die Ansicht übergeben. –

+0

@SamiKuhmonen, also muss ich eine neue Instanz des Modells erstellen, oder? wie folgt: '@model modelEmp = new MoelEmployee();' ?, Sorry, ich bin Neuling ... – NightShade555

+1

Sie müssen das tun, wenn Sie das Modell von der Steuerung –

Antwort

2

ein Ansichtsmodell erstellen:

public class EmployeeViewModel 
{ 
    public List<Employee> Employees { get; set; } 
} 

Ihr Ansichtsmodell wird müssen:

@model EmployeeViewModel 

In Ihrer Aktion müssen Sie das Ansichtsmodell erstellen und sie zu der Ansicht passieren wie:

[HttpGet] 
public async Task<IActionResult> Index() 
{ 
    var AllEmployees = await _Context.Employee.ToListAsync(); 

    var model = new EmployeeViewModel(); 
    model.Employees = AllEmployees; 

    return View(model); 
} 

Bearbeiten Sie die Ansicht auch so, dass sie dem neuen ViewModel entspricht:

@foreach (var item in Model.Employees) 
{ 
    <tr> 
     <td>@Html.DisplayFor(modelItem => item.EmployeeId)</td> 
     <td>@Html.DisplayFor(modelItem => item.Fname) @Html.DisplayFor(modelItem => item.Lname)</td> 
     <td>@Html.DisplayFor(modelItem => item.PhoneNumber)</td> 
     <td>@Html.DisplayFor(modelItem => item.Position)</td> 
     <td> 
      <a class="btn btn-primary btn-sm" asp-controller="Employee" asp-action="Details" asp-route-id="@item.EmployeeId"><span class="glyphicon glyphicon-dashboard" style="vertical-align:middle;margin-top: -5px"></span> Details</a> 
      <button type="button" class="btn btn-warning btn-sm openEdit" data-toggle="modal" data-target="#myModal" data-emp-id="@item.EmployeeId"><span class="glyphicon glyphicon-edit" style="vertical-align:middle;margin-top: -5px"></span> Edit</button> 
      <button type="button" class="btn btn-danger btn-sm openDiag" data-toggle="modal" data-target="#myModal" data-emp-id="@item.EmployeeId"><span class="glyphicon glyphicon-trash" style="vertical-align:middle;margin-top: -5px"></span> Delete</button> 
     </td> 
    </tr> 

} 
+0

Hallo @Cristian, wie Sie sehen, ich habe alles auf ModelEmployee alle notwendigen Modelle, die ich in einer einzigen Ansicht verwenden werde. Der Code, den du gepostet hast, hat bei mir nicht funktioniert. Hast du eine andere Idee, wie das zu beheben ist? scheint, dass ich die Konzepte auf MVC noch nicht wirklich verstehe, da ich noch ASP.NET studiere. – NightShade555

+0

Meine Antwort geändert. Sollte jetzt für dich arbeiten. –