Dies ist das erste Mal, dass ich sowohl eine MVC 5-Anwendung schreibe als auch C# verwende. Ich bin ziemlich weit gekommen und konnte einige Fehler, die mir begegnet sind, in Schwierigkeiten bringen.MVC 5 Detailansicht zeigt keine Daten für Felder mit Fremdschlüsseln
Ich habe ein paar Modelle und Tabellen eingerichtet, einschließlich Fremdschlüssel Referenzen. Auf meiner Indexseite, zeigt jeder Datensatz die Fremdschlüsselwerte mit dem folgenden Controller-Code:
Index Controller
public ActionResult Index(int? filterDwg)
{
var checkOut = db.CheckOut.Include(c => c.CheckOutStatus).Include(c => c.DwgList);
var checkedOut = checkOut.Where(s => s.CheckStatus == (1));
//Filtering by Drawing
if (filterDwg != null)
{
checkedOut = checkedOut.Where(d => d.DrawingId == (filterDwg));
}
return View(checkedOut.ToList());
}
Nun, meine Details Seite, mein Controller ist wie folgt:
Details Steuerung
public ActionResult Details(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
CheckOut checkOut = db.CheckOut.Find(id);
if (checkOut == null)
{
return HttpNotFound();
}
return View(checkOut);
}
Wenn ich die fol Muhen Ansicht:
Details anzeigen
@model NoDwgASP.Models.CheckOut
@{
ViewBag.Title = "Details";
}
<h2>Details</h2>
<div>
<h4>CheckOut</h4>
<hr />
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.CheckOutStatus.CheckStatusName)
</dt>
<dd>
@Html.DisplayFor(model => model.CheckOutStatus.CheckStatusName)
</dd>
<dt>
@Html.DisplayNameFor(model => model.DwgList.DwgNum)
</dt>
<dd>
@Html.DisplayFor(model => model.DwgList.DwgNum)
</dd>
<dt>
@Html.DisplayNameFor(model => model.UserInitials)
</dt>
<dd>
@Html.DisplayFor(model => model.UserInitials)
</dd>
<dt>
@Html.DisplayNameFor(model => model.Project)
</dt>
<dd>
@Html.DisplayFor(model => model.Project)
</dd>
<dt>
@Html.DisplayNameFor(model => model.CheckOutDate)
</dt>
<dd>
@Html.DisplayFor(model => model.CheckOutDate)
</dd>
<dt>
@Html.DisplayNameFor(model => model.ReturnDate)
</dt>
<dd>
@Html.DisplayFor(model => model.ReturnDate)
</dd>
</dl>
</div>
<p>
@Html.ActionLink("Edit", "Edit", new { id = Model.CheckId }) |
@Html.ActionLink("Back to List", "Index")
</p>
Die Felder für DwgNum und CheckStatusName sind leer. Diese Felder sind Ganzzahlen und Fremdschlüssel, die an eine andere Datenbank gebunden sind, die über Zeichenfolgenwerte für diese Eigenschaften verfügt.
Ich weiß, ich brauche, um so etwas wie
var checkOut = db.CheckOut.Include(c => c.CheckOutStatus).Include(c => c.DwgList)
wie ich in meinem Index Controller tat aber ich kann nicht einfach eine .INCLUDE anhängen auf
CheckOut checkOut = db.CheckOut.Find(id);
Hat Anregungen jemand? Ich bin ratlos, und ich konnte keine verwandten Probleme finden.
Sie können 'db.CheckOut.Include (....) Wo (x => x.ID == id) .FirstOrDefault();.' (vorausgesetzt, 'ID' ist Ihr PK-Feld) –
Vielen Dank! Das hat funktioniert ... Ich war auf dem Weg zurück, um mein eigenes zu beantworten, denn ich hatte die Idee nach "combinate include und finde MVC 5" zu suchen, nachdem ich gepostet habe .... http://stackoverflow.com/questions/7348663/ c-sharp-entity-framework-how-can-i-combine-a-find-and-include-on-a-model-obje – mecasull
Die Find-Methode unterstützt nicht Include. Das liegt möglicherweise daran, dass Find zuerst versucht, nach im Speicher geladenen Entitäten zu suchen, und dann versucht, zur Datenbank zurückzukehren, sodass Sie Where wie von Stephen vorgeschlagen verwenden müssen. – Vinod