C# 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

问题背景:

我有一个实现引导的MVC站点。目前,每个页面都基于
主布局
查看页面。此主机包含一个下拉列表,其中将填充站点购物车中的购物车项目以及购物车的总货币价值。请注意,当前下拉列表中的详细信息是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 &copy; 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 &copy; 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。我有一个。这件事很紧急,你能帮我吗。我真的会帮你的忙。