Как передать переменные между представлениями и частичными представлениями в MVC 3? - PullRequest
2 голосов
/ 28 ноября 2011

Я создаю частичное представление в виде крошки, которое принимает коллекцию заголовка / URL. Коллекция будет создана в методах действия и должна быть доступна в частичном представлении крошки.

Я попробовал несколько способов сделать это, и это один из таких: http://goo.gl/rMFlp

Но кое-как, как я не мог заставить его работать. Все, что я получаю, это «Ссылка на объект, не установленная для экземпляра объекта». Ребята, вы можете мне помочь?

{Updare} Вот код:

Я создал класс Model следующим образом

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

Метод действия

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);
    }

Модель привязки вида - Индекс

@Model NexCart.Model.Model.Custom.ShopModel

Наконец, вот код на частичном представлении:

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

1 Ответ

1 голос
/ 28 ноября 2011

Вы не показали ни одного кода, поэтому на ваш вопрос невозможно ответить.Это, как говорится, вот как вы могли бы продолжить.Как всегда в приложении ASP.NET MVC, вы начинаете с определения модели представления:

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

, затем вы можете написать действие контроллера, которое заполнит коллекцию хлебных крошек и передаст их частичному представлению:

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);
    }
}

тогда у вас может быть соответствующий частичный вид, который будет отображать эту модель (~/Views/Breadcrumb/Index.cshtml):

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

и соответствующий шаблон отображения (~/Views/Breadcrumb/DisplayTemplates/Breadcrumb.cshtml):

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

Теперь осталось только включить это дочернее действие где-нибудь с помощью Html.Action helper .Например, вы можете сделать это в _Layout, если эта хлебная крошка повторяется на каждой странице:

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

Но, очевидно, это также может быть сделано в любом представлении.

...