在asp.net MVC中从控制器创建超链接

时间:2013-03-25 14:58:47

标签: c# asp.net asp.net-mvc

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

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 = ...> 字符串,并将其传递给视图?

谢谢,

标记

2 个答案:

答案 0 :(得分: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++;
}

答案 1 :(得分: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的属性。