C# MVC中共享布局视图的控制器方法?
问题背景: 我有一个实现引导的MVC站点。目前,每个页面都基于C# MVC中共享布局视图的控制器方法?,c#,html,asp.net-mvc,C#,Html,Asp.net Mvc,问题背景: 我有一个实现引导的MVC站点。目前,每个页面都基于主布局查看页面。此主机包含一个下拉列表,其中将填充站点购物车中的购物车项目以及购物车的总货币价值。请注意,当前下拉列表中的详细信息是HTML中的固定值: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-s
主布局
查看页面。此主机包含一个下拉列表,其中将填充站点购物车中的购物车项目以及购物车的总货币价值。请注意,当前下拉列表中的详细信息是HTML中的固定值:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title></title>
@Styles.Render("~/Content/bootstrap.css")
@Styles.Render("~/Content/Styles.css")
@Scripts.Render("~/bundles/modernizr")</script>
</head>
<body>
<div class="navbar navbar-fixed-top">
<nav class="navbar navbar-default" role="navigation" id="nav">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand logo">HS<b>WH</b></a>
</div>
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
<li><a href="#" class="scroll-link" data-id="myCarousel">Products</a></li>
<li><a href="#" class="scroll-link" data-id="Welcome">About Us</a></li>
<li><a href="#" class="scroll-link" data-id="features">Contact</a></li>
</ul>
<form class="navbar-form pull-right">
<input type="text" class="form-control" placeholder="Search this site..." id="searchInput">
<button type="submit" class="btn btn-default"><span class="glyphicon glyphicon-search"></span></button>
</form>
<form class="navbar-form pull-right">
<div class="btn-group btn-group-cart">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
<span class="pull-left"><i class="fa fa-shopping-cart icon-cart"></i></span>
<span class="pull-left">Shopping Cart: 2 item(s)</span>
<span class="pull-right"><i class="fa fa-caret-down"></i></span>
</button>
<ul class="dropdown-menu cart-content" role="menu">
<li>
<a href="detail.html">
<b>Penn State College T-Shirt</b>
<span>x1 $528.96</span>
</a>
</li>
<li>
<a href="detail.html">
<b>Live Nation ACDC Gray T-Shirt</b>
<span>x1 $428.96</span>
</a>
</li>
<li class="divider"></li>
<li><a href="cart.html">Total: $957.92</a></li>
</ul>
</div>
</form>
</div>
</div>
</nav>
</div>
@RenderBody()
<footer>
<div class="container">
<div class="row">
<div class="col-sm-12 textAlignCenter">
<h5>Copyright © 2014 - Test Site</h5>
</div>
</div>
</div>
</footer>
<script>
$(document).ready(function () {
$('.dropdown-toggle').dropdown('toggle')
});
</script>
</body>
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/bootstrap")
@RenderSection("scripts", required: false)
</html>
我想要什么:
我试图寻找这个,但似乎找不到确切的答案。我希望能够在每次加载页面时,使用购物车内容填充导航栏中的下拉列表
。为此,我需要一种方法来提取存储在会话
对象变量中的购物车项目对象。目前我的MasterLayout
视图就是这样,它是一个没有关联控制器的视图
如何将某种方法分配给我的主布局
,以便我可以将购物车项目模型传递给视图,该视图将在每次加载页面时设置为下拉列表?
以下是HTML:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title></title>
@Styles.Render("~/Content/bootstrap.css")
@Styles.Render("~/Content/Styles.css")
@Scripts.Render("~/bundles/modernizr")</script>
</head>
<body>
<div class="navbar navbar-fixed-top">
<nav class="navbar navbar-default" role="navigation" id="nav">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand logo">HS<b>WH</b></a>
</div>
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
<li><a href="#" class="scroll-link" data-id="myCarousel">Products</a></li>
<li><a href="#" class="scroll-link" data-id="Welcome">About Us</a></li>
<li><a href="#" class="scroll-link" data-id="features">Contact</a></li>
</ul>
<form class="navbar-form pull-right">
<input type="text" class="form-control" placeholder="Search this site..." id="searchInput">
<button type="submit" class="btn btn-default"><span class="glyphicon glyphicon-search"></span></button>
</form>
<form class="navbar-form pull-right">
<div class="btn-group btn-group-cart">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
<span class="pull-left"><i class="fa fa-shopping-cart icon-cart"></i></span>
<span class="pull-left">Shopping Cart: 2 item(s)</span>
<span class="pull-right"><i class="fa fa-caret-down"></i></span>
</button>
<ul class="dropdown-menu cart-content" role="menu">
<li>
<a href="detail.html">
<b>Penn State College T-Shirt</b>
<span>x1 $528.96</span>
</a>
</li>
<li>
<a href="detail.html">
<b>Live Nation ACDC Gray T-Shirt</b>
<span>x1 $428.96</span>
</a>
</li>
<li class="divider"></li>
<li><a href="cart.html">Total: $957.92</a></li>
</ul>
</div>
</form>
</div>
</div>
</nav>
</div>
@RenderBody()
<footer>
<div class="container">
<div class="row">
<div class="col-sm-12 textAlignCenter">
<h5>Copyright © 2014 - Test Site</h5>
</div>
</div>
</div>
</footer>
<script>
$(document).ready(function () {
$('.dropdown-toggle').dropdown('toggle')
});
</script>
</body>
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/bootstrap")
@RenderSection("scripts", required: false)
</html>
@style.Render(“~/Content/bootstrap.css”)
@Styles.Render(“~/Content/Styles.css”)
@Scripts.Render(“~/bundles/modernizer”)
切换导航
购物车:2件
@RenderBody()
版权及副本;2014年-试验场地
$(文档).ready(函数(){
$('.dropdown toggle')。dropdown('toggle'))
});
@Scripts.Render(“~/bundles/jquery”)
@Scripts.Render(“~/bundles/bootstrap”)
@RenderSection(“脚本”,必需:false)
我可能会使用从主布局调用的子操作来执行此操作
@Html.Action("Cart")
在服务器端,create操作返回PartialViewResult,它呈现您的购物车模型
在前端,通过@Html.Action(“YourPartialCart”、“CartController”)
或ajax调用呈现局部视图。所有视图都有一个与之关联的控制器,因为这些视图是继承的。例如,创建视图时,您将其布局设置为与master.cshtml文件相同
您的视图具有与其关联的模型
你可以用几种方法来解决这个问题
最简单的方法是使用类似于HttpContext.Current.Items的东西,它是在HttpRequest期间从任何地方都可以访问的共享数据的请求唯一集合
下一步是在模型上使用继承。例如,创建这样的模型
主模型
->CartPageModel(继承主模型)
->AccountSettingsModel(继承主模型)
等等
然后在母版页上,通过@model MasterModel代码将模型设置为MasterModel,在您的视图中,它将是@model CartPageModel
在控制器中,代码将填充基本模型主模型及其驱动类型CartPageModel上的值。我认为最简单的方法(如其他人所说)是从布局页面(Html.action)调用控制器操作。感谢您的回复。很抱歉,如果这听起来是一个愚蠢的问题,但我仍然不确定当主布局只是一个视图时,如何在这种情况下调用“Cart”方法?或者是因为我有其他从主布局继承视图的控制器,我可以在我想要的任何控制器上设置方法?我有一个“CartController”类,用于在人们去结账前显示购物车项目的网格视图。我可以用这个吗?@user1352057布局只是一个视图的容器,每个视图都有自己的布局或使用主视图。视图仅在调用操作时呈现。如果您在每个页面上都使用购物车,那么将其包含在主布局中是有意义的,并且子操作(例如,在购物车控制器上调用)是处理获取该数据的合理方式。这可能是一个不同的操作,比如说“MiniCart”,它只在header.Hi中呈现所需的HTML。我有一个。这件事很紧急,你能帮我吗。我真的会帮你的忙。