Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc ASP.NET MVC中的请求特定数据_Asp.net Mvc - Fatal编程技术网

Asp.net mvc ASP.NET MVC中的请求特定数据

Asp.net mvc ASP.NET MVC中的请求特定数据,asp.net-mvc,Asp.net Mvc,我想在我的asp.NETMVC4网站上显示面包屑。面包屑的生成取决于上下文,例如,在forumpage上,它的确定方式与在blogpage上不同。一方面,应该有一个partialview“Breadcrumbs”,但是这个partialview本身并不知道上下文。我不想用面包屑的东西“污染”我的Viewmodels。我想到了两种可能的解决方案: 1) 使viewmodels从包含breadcrumbdata的basemodel派生,在视图中,可以使用给定的ViewModel作为模型调用parti

我想在我的asp.NETMVC4网站上显示面包屑。面包屑的生成取决于上下文,例如,在forumpage上,它的确定方式与在blogpage上不同。一方面,应该有一个partialview“Breadcrumbs”,但是这个partialview本身并不知道上下文。我不想用面包屑的东西“污染”我的Viewmodels。我想到了两种可能的解决方案:

1) 使viewmodels从包含breadcrumbdata的basemodel派生,在视图中,可以使用给定的ViewModel作为模型调用partialview“Breadcrumbs”。 2) 在操作中,将breadcrumbdata保存在partialview“Breadcrumbs”可以读取它们的地方(例如,在webforms中,我们有HttpContext.Items)


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

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

在您的视图中,您可以获取会话数据

@{
    var breadcrumbs = (BreadCrumbsCastHere)@Session["breadcrumbs"];
}

面包屑的部分视图应该提供上下文(作为一个模型,可能是一个包含文本和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 }) }
};
@Html.RenderPartial( "_Breadcrumbs", ViewBag.Breadcrumbs )
@Model IEnumerable<Breadcrumb>

@* Render breadcrumbs *@
\u Breadcrumbs.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 }) }
};
@Html.RenderPartial( "_Breadcrumbs", ViewBag.Breadcrumbs )
@Model IEnumerable<Breadcrumb>

@* Render breadcrumbs *@
@Model IEnumerable
@*渲染面包屑*@

面包屑数据可以以一种更灵活的方式生成,但您没有问过这一点,所以我不打算深入讨论这一部分。只需说获取面包屑的父列表以供查看,然后添加自己的就更好了。

另外。。。命名空间中有一个上下文,它包含一个Items键值对字典。如果您习惯了WebForms.imho中的HttpContext,您可能会考虑到这一点。这并不是一个比op中的#1更好的选项。它引入了状态,如果可能的话应该避免。为什么您对您提到的第一个选项不满意。这看起来是一个相当干净的实现。