Asp.net mvc ASP.NET MVC中的请求特定数据
我想在我的asp.NETMVC4网站上显示面包屑。面包屑的生成取决于上下文,例如,在forumpage上,它的确定方式与在blogpage上不同。一方面,应该有一个partialview“Breadcrumbs”,但是这个partialview本身并不知道上下文。我不想用面包屑的东西“污染”我的Viewmodels。我想到了两种可能的解决方案: 1) 使viewmodels从包含breadcrumbdata的basemodel派生,在视图中,可以使用给定的ViewModel作为模型调用partialview“Breadcrumbs”。 2) 在操作中,将breadcrumbdata保存在partialview“Breadcrumbs”可以读取它们的地方(例如,在webforms中,我们有HttpContext.Items)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
但我对这两种选择都不太满意。有没有更优雅的方法来实现这一点?如果启用了会话状态,您可能会使用会话 在您的视图中,您可以获取会话数据
@{
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更好的选项。它引入了状态,如果可能的话应该避免。为什么您对您提到的第一个选项不满意。这看起来是一个相当干净的实现。