Ich versuche, eine einfache Anwendung zu erstellen, aber meine Ansicht gibt nichts zurück, wenn ich versuche, ein Viewmodel zu verwenden. Ich nehme an, die "db. [TableName] .ToList();", die funktioniert, wenn sie auf ein Domänenmodell angewendet wird, ist nicht genug und die Auswahl sollte auf andere Weise geschehen, wenn ich ein Viewmodel verwende, aber ich habe keine Idee es. Bitte helfen Sie. Vielen Dank.ASP.NET MVC Viewmodel gibt nichts zurück
Town.cs
using System.Collections.Generic;
namespace City.Models
{
public class Town
{
public Town()
{
Streets = new List<Street>();
}
public int TownId { get; set; }
public string TownName { get; set; }
public virtual ICollection<Street> Streets { get; set; }
}
}
Street.cs
using System.Collections.Generic;
namespace City.Models
{
public class Street
{
public Street()
{
Houses = new List<House>();
}
public int StreetId { get; set; }
public string StreetName { get; set; }
public virtual ICollection<House> Houses { get; set; }
}
}
House.cs
namespace City.Models
{
public class House
{
public int HouseId { get; set; }
public string HoueseName { get; set; }
public int StreetId { get; set; }
public virtual Street Street { get; set; }
}
}
Boden CS-
namespace City.Models
{
public class Floor
{
public int FloorId { get; set; }
public int FloorNumber { get; set; }
public int FireExtinguisherId { get; set; }
}
}
FireExtinguisher.cs
namespace City.Models
{
public class FireExtinguisher
{
public int FireExtinguisherId { get; set; }
public string FireExtinguisherName { get; set; }
public int FloorId { get; set; }
}
}
MyViewModel.cs
namespace City.Models
{
public class MyViewModel
{
public MyViewModel()
{
Town = new Town();
Street = new Street();
House = new House();
Floor = new Floor();
FireExtinguisher = new FireExtinguisher();
}
public int MyViewModelId { get; set; }
public Town Town { get; set; }
public Street Street { get; set; }
public House House { get; set; }
public Floor Floor { get; set; }
public FireExtinguisher FireExtinguisher { get; set; }
}
}
ApplicationDbContext.cs
HomeController.cs (ich denke, das Problem liegt hier)
using System.Linq;
using System.Web.Mvc;
using City.Models;
namespace City.Controllers
{
public class HomeController : Controller
{
private ApplicationDbContext db;
public HomeController()
{
db = new ApplicationDbContext();
}
public ActionResult Index()
{
return View(db.MyViewModels.ToList());
}
public ActionResult About()
{
ViewBag.Message = "Your application description page.";
return View();
}
public ActionResult Contact()
{
ViewBag.Message = "Your contact page.";
return View();
}
}
}
Index.cshtml
@model IEnumerable<City.Models.MyViewModel>
<h2>Map information</h2>
<div class="container">
<table class="table">
<thead>
<tr>
<th>Town</th>
<th>Street</th>
<th>House</th>
<th>Floor</th>
<th>FireExtinguisher</th>
</tr>
</thead>
@foreach (var item in Model)
{
<tbody>
<tr>
<td>@(item.Town.TownName)</td>
<td>@(item.Street.StreetName)</td>
<td>@(item.House.HoueseName)</td>
<td>@(item.Floor.FloorNumber)</td>
<td>@(item.FireExtinguisher.FireExtinguisherName)</td>
</tr>
</tbody>
}
</table>
</div>
Auch wenn ich Testdaten in der db haben, das ist alles was ich sehe, wenn ich es laufe:
Bitte sagen Sie mir, was ich beheben sollte, wie Daten abgerufen werden.
DankEDIT @CrowdCoder
Ich glaube nicht, dass Sie die richtigen Konventionen für Entity Framework verwenden. Sie erweitern alles im Konstruktor von 'MyViewModel' und ich glaube nicht, dass Ihre Struktur die richtigen Navigationseigenschaften erzeugt. Es ist jedoch eine Weile her, seit ich EF benutzt habe. In Ihrem Controller trennen Sie diese Zeile in eine Variable, so dass Sie daran knacken können und schauen Sie auf ihren Wert 'db.MyViewModels.ToList()' (auch sollten Sie nicht ToList() this) – Crowcoder
Ich habe versucht, aber es brach ohne ToList(). meinen Beitrag bearbeitet, siehe Änderungen – Riwi
Sie können helfen, Ihr Problem als EF-bezogen zu diagnostizieren oder nicht, indem Sie ein fest codiertes Ansichtsmodell in Ihrem Controller zurückgeben, anstatt in die Datenbank zu rufen. Zum Testen erstellen Sie manuell einige MyView-Modelle und sehen Sie, ob Ihre Ansicht diese anzeigt. – Crowcoder