2016-03-29 1 views
1

Ich habe eine ASP.NET MVC App. Meine App muss Breadcrumbs anzeigen, die den Standort des Nutzers in der App darstellen. In dem Bemühen, dies zu tun, ich so etwas wie die folgenden in einem Master-Layout-Seite haben wollte:ASP.NET MVC - C# - Definieren Sie Schlüsselwertpaar für die Verwendung in Razor View

@foreach(var link in ViewBag["Links"]) 
{ 
    <div>|</div> 
    <a href="@link.url">@link.text</a> 
} 

Dann in jeder Ansicht, würde ich so etwas wie die folgenden an der Spitze haben:

@{ 
    Layout = "~/Views/Layouts/_Breadcrumbed.cshtml"; 
    ViewBag.Links = new Dictionary<string, string>() 
    { 
     { "Home", "/home" }, 
     { "Parent", "/parent" } 
    }; 
} 

Wenn dieser Code ausgeführt wird, erhalte ich folgende Fehlermeldung:

Cannot apply indexing with [] to an expression of type 'System.Dynamic.DynamicObject' 

ich verstehe nicht, warum ich das bekommen habe. Mache ich den richtigen Pfad zum Erstellen eines Breadcrumbs? Wenn nicht, welcher Ansatz ist besser?

+0

Was passiert, wenn Sie 'ViewBag [" Links "]' durch 'ViewBag.Links' ersetzen? – David

+0

@David gibt es keinen Unterschied, das Problem bezieht sich auf ViewBag mit dynamischen, nicht stark typisiert. Er muss die Variable Links auf Dictionary – Fals

+1

werfen, obwohl es verwirrend ist, ["Links"] an einem Ort und .Links in einem anderen – n8wrl

Antwort

4

Sie müssen ViewBag ["Links"] in Ihr Wörterbuch einfügen, damit Sie wissen, worauf Sie iterieren müssen.

@foreach(var link in (IDictionary<string, string>)ViewBag["Links"])