2

我有一个控制器,它创建面包屑如下:

Software > Windows 7 > Outlook 2007

创建它的代码是:

ViewBag.breadcrumbs = string.Join(" > ", cbh.Select(i => i.Title));

有没有一种直接的方法来制作面包屑超链接,它指向(i.ParentID),即:

Software -> forum/index/12
Windows 7 -> forum/index/19
Outlook 2007 -> forum/index/23

或者我应该只循环cbh并手动构建<a href=...>字符串,然后将它们传递给视图?

谢谢,

标记

4

2 回答 2

3

您最好的选择是将所需的项目放入模型中,然后循环遍历它们。

尝试这样的事情:

模型

public class Model
{
    public struct BreadCrumb
    {
        public string Title;
        public string Url;
    }

    public List<BreadCrumb> Breadcrumbs { get; set; }
}

看法

@{ int index = 0; }
@foreach(var crumb in this.Model.Breadcrumbs)
{
    <a href="@(crumb.Url)" title="@(crumb.Title)">@(crumb.Title)</a>

    if(index < this.Model.Breadcrumbs.Count - 1)
    {
        <span>&gt;</span>
    }

    index++;
}
于 2013-03-25T15:02:27.227 回答
1

是的,您应该在视图中构建您的面包屑链接。如果有帮助,您可以创建一个BreadCrumbModel课程(如果您还没有课程)。

ViewBag.breadcrumbs = cbh.Select(i => new BreadCrumbModel() 
                                      {
                                          Id = i.Id, 
                                          Title = i.Title 
                                      });

@{ 
    var printSeparator = false;
}
@foreach(BreadCrumbModel bc in ViewBag.breadcrumbs)
{
    @if(printSeparator)
    {
        <span class="breadcrumb-separator">&nbsp;&gt;&nbsp;</span>
    }
    <span class="breadcrumb">
      @Html.ActionLink(bc.Title, "index", "forum", new { id = bc.Id });
    </span>
    @{
        printSeparator = true;
    }
}

如果你想在不同的控制器和动作(不仅仅是论坛/索引)之间有面包屑,然后将它们添加为你的BreadCrumbModel.

于 2013-03-25T15:00:11.670 回答