Beim Einrichten einer MVC 3-Anwendung werden die Fremdschlüssel, die Dropdownlisten zum Auswählen eines Elements zulassen sollen, nicht als Dropdown-Elemente, sondern als statische Eingaben gerendert. Dies kann durch Erstellen einer benutzerdefinierten Anzeige und Ansicht für dieses Feld gelöst werden. Wir müssen mit der Erstellung einer benutzerdefinierten Teilansicht beginnen, die in "~/Views/Shared/DisplayTemplates/UserGuid.cshtml" und "~/Views/Shared/EditTemplates/UserGuid.cshtml" enthalten ist. Der Code für eine ist unten zu finden:
@model Guid
@{
incMvcSite.Models.MvcSiteDB db = new incMvcSite.Models.MvcSiteDB();
incMvcSite.Models.SecUser usr = db.SecUsers.Single(u => u.Guid == Model);
}
@usr.Display
Dies ist eine Anzeige für eine Vorlage, die das Element in der referenzierten Tabelle aussehen wird und es angezeigt werden soll. Wir benötigen auch eine Bearbeitung für die Vorlage wie folgt:
@model Guid
@{
incMvcSite.Models.MvcSiteDB db = new incMvcSite.Models.MvcSiteDB();
SelectList items = new SelectList(db.SecUsers.OrderBy(i => i.Display).ToList(), "Guid", "Display", Model);
}
@Html.DropDownList("", items)
Die Bearbeitung für Vorlage ist als Dropdown-Liste implementiert. Ursprünglich haben wir statischen HTML-Code verwendet, aber das Problem tritt bei der Implementierung eines "Präfixes" auf. Statischer HTML-Code wird von HTML-Helfern gehandhabt. Daher wird empfohlen, dass Sie HTML.DropDownList() verwenden. Um den MVC-Framework zu zwingen, die neuen Anzeigen und Bearbeiten für Vorlagen zu verwenden, müssen wir unser Modell Artikel Annote eines die folgende Zeile hinzufügen: [UIHint („UserGuid“)]
Das MVC wird bewirken, dass die Anzeige verwenden, und Bearbeiten von Vorlagen mit dem Namen "UserGuid", die nur Teilansichten sind.
Danke für die Antwort funktioniert fantastisch. Nur eine weitere Frage, wenn ich zwei getrennte Objekte mit verschiedenen Child-Listen habe, sagen, dass Accounts und Personen beide den Objektnamen List'1 haben, wie unterscheiden Sie zwischen den beiden? Oder müssen Sie UIHint-Attribute verwenden? – lancscoder
ja, beide werden gleich sein.Ich denke, dass die UIHint funktioniert (habe nicht versucht), aber was Sie auch tun können, ist, dass die Listenvorlage generisch ist (sagen wir, basierend auf IEnumerable, nicht-generisch) und dann DisplayFor innerhalb * seiner * Liste aufrufen und dann Die Listenelemente haben jeweils ihre korrekt typisierte Vorlage. Sie können auch einen expliziten Vorlagennamen als Zeichenfolge in einer der Überladungen übergeben. – Paul
(Bearbeitet, um literalen Backtick in Markdown-Syntax zu beheben.) –