0

我想在我的 asp.net mvc 4 网站上显示面包屑。面包屑的生成取决于上下文,例如在论坛页面上,它的确定方式与在博客页面上不同。一方面,应该有一个局部视图“面包屑”,但是这个局部视图本身并不知道上下文。而且我不想用面包屑“污染”我的视图模型。我想到了两种可能的解决方案:

1)使视图模型派生自包含面包屑数据的基本模型,并且在视图中,可以使用给定的视图模型作为模型来调用部分视图“面包屑”。2)在动作中将面包屑数据保存在某个地方(例如,在 web 表单中,我们有 HttpContext.Items),部分视图“面包屑”可以读取它们。

但我对这两种选择都不是很满意。有没有更优雅的方法来实现这一点?

4

2 回答 2

0

如果启用了会话状态,您可能会使用 Session。

在您看来,您可以获得会话数据

@{
    var breadcrumbs = (BreadCrumbsCastHere)@Session["breadcrumbs"];
}
于 2013-02-07T17:38:38.810 回答
0

面包屑的局部视图应该给出上下文(作为模型,可能是带有文本和 URL 的面包屑列表)。

如果我们假设每个视图都知道它的面包屑,您可以将面包屑数据从视图传递到部分视图:

如果您在布局页面中呈现面包屑,视图应该将面包屑数据传递给布局页面。我会用ViewBag那个。

所以,这就是我的做法(如果面包屑不是很深并且相对稳定):

SomeView.cshtml

ViewBag.Breadcrumbs = new List<Breadcrmb>() {
          new Breadcrumb(){ Title = "Home", Url = Url.Action("Index", "Home") },
          new Breadcrumb(){ Title = TopicModel.Forum.Title,
                            Url = Url.Action("Forum",
                                             new { id = TopicModel.ForumId }) },
          new Breadcrumb(){ Title = TopicModel.Title,
                            Url = Url.Action("ViewTopic",
                                             new { id = TopicModel.Id }) }
};

_Layout.cshtml

@Html.RenderPartial( "_Breadcrumbs", ViewBag.Breadcrumbs )

_面包屑.cshtml

@Model IEnumerable<Breadcrumb>

@* Render breadcrumbs *@

面包屑数据可以以更灵活的方式生成,但您没有问过这个问题,所以我不打算深入探讨这部分。只需说获取视图的面包屑的父列表,然后添加您自己的会更好。

于 2013-02-07T17:55:59.220 回答