2 Stimmen

Wie man Variablen über Ansichten und partielle Ansichten in Mvc 3 übergeben?

Ich erstelle eine partielle Breadcrumb-Ansicht, die eine Sammlung von Titel/URL aufnimmt. Die Sammlung wird in Aktionsmethoden generiert und müsste in der partiellen Breadcrumb-Ansicht verfügbar sein.

Ich habe einige Möglichkeiten ausprobiert, um das zu erreichen, und dies ist eine davon: http://goo.gl/rMFlp

Aber irgendwie konnte ich es nicht zum Laufen bringen. Alles was ich bekomme ist eine "Objektreferenz nicht auf eine Instanz eines Objekts gesetzt". Könnt ihr mir helfen?

{Updare} Hier ist der Code:

Ich habe eine Model-Klasse wie folgt erstellt

public class ShopModel
{
    public Dictionary<string,string> Breadcrumb { get; set; }
}

Aktion Methode

public ActionResult Index()
    {
        var breadcrumbCollection = new Dictionary<string,string>();
        breadcrumbCollection.Add("/home","Home");
        breadcrumbCollection.Add("/shop","Shop");

        var model = new ShopModel() { Breadcrumb = breadcrumbCollection};

        return View(model);
    }

Modellbindung der Ansicht - Index

@Model NexCart.Model.Model.Custom.ShopModel

Zum Schluss folgt der Code für die Teilansicht:

<div>
@{
    foreach (var item in @Model.Breadcrumb)
    {
        <a href="#">@item.Key</a>
    }
    }

1voto

Darin Dimitrov Punkte 990883

Sie haben keinen Code gezeigt, daher ist Ihre Frage nicht zu beantworten. Trotzdem könnten Sie folgendermaßen vorgehen. Wie immer in einer ASP.NET MVC-Anwendung beginnen Sie mit der Definition eines View-Modells:

public class Breadcrumb
{
    public string Title { get; set; }
    public string Url { get; set; }
}

dann könnten Sie eine Controller-Aktion schreiben, die eine Sammlung von Breadcrumbs auffüllt und sie an eine Teilansicht weitergibt:

public class BreadcrumbController: Controller
{
    public ActionResult Index()
    {
        // TODO: pull the breadcrumbs from somewhere instead of hardcoding them
        var model = new[]
        {
            new Breadcrumb { Title = "Google", Url = "http://www.google.com/" },
            new Breadcrumb { Title = "Yahoo", Url = "http://www.yahoo.com/" },
            new Breadcrumb { Title = "Bing", Url = "http://www.bing.com/" },
        };
        return PartialView(model);
    }
}

dann könnten Sie eine entsprechende Teilansicht haben, die dieses Modell wiedergibt ( ~/Views/Breadcrumb/Index.cshtml ):

@model IEnumerable<Breadcrumb>
<ul>
    @Html.DisplayForModel()
</ul>

und die entsprechende Anzeigevorlage ( ~/Views/Breadcrumb/DisplayTemplates/Breadcrumb.cshtml ):

@model Breadcrumb
<li>
    <a href="@Model.Url">@Model.Title</a>
</li>

Jetzt muss diese untergeordnete Aktion nur noch irgendwo mit der Html.Action-Helfer . Sie könnten dies zum Beispiel im _Layout tun, wenn dieser Brotkrümel auf jeder Seite wiederholt wird:

@Html.Action("Index", "Breadcrumb")

Aber natürlich könnte man das auch in jeder anderen Ansicht machen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X