首页 > 其他分享 >MVC 音乐商店 第 10 部分: 导航和网站设计、 结论的最后更新

MVC 音乐商店 第 10 部分: 导航和网站设计、 结论的最后更新

时间:2023-08-03 18:07:50浏览次数:55  
标签:10 商店 专辑 视图 MVC CartSummary 添加 我们


MVC 音乐商店是介绍,并分步说明了如何使用 ASP.NET MVC 和 Visual Studio 为 web 开发教程应用程序。

MVC 音乐商店是一个轻量级的示例存储实现它卖音乐专辑在线,并实现基本的网站管理、 用户登录,和购物车功能。

这个系列教程详细说明所有为构建 ASP.NET MVC 音乐商店示例应用程序采取的步骤。第 10 部分涵盖最后更新导航和网站设计、 结论。


我们已经完成所有的主要功能为我们的网站,但我们仍然有一些功能将添加到网站的导航、 主页上和商店浏览页面。

创建购物车摘要部分视图

我们想要公开整个站点的用户的购物车中的项目数。

我们可以轻松地实现这通过创建一个局部视图,添加到我们的 Site.master。

如先前所示,商城控制器包括 CartSummary 的操作方法,它返回一个局部视图:

//
// GET: /ShoppingCart/CartSummary
[ChildActionOnly]
 public ActionResult CartSummary()
{
    var cart = ShoppingCart.GetCart(this.HttpContext);
 
    ViewData["CartCount"] = cart.GetCount();
    return PartialView("CartSummary");
}

要创建 CartSummary 分部视图,视图/商城的文件夹上单击鼠标右键并选择添加视图。命名视图 CartSummary,并选中"创建一个局部视图"复选框,如下所示。

CartSummary 分部视图是很简单-它是只是一个链接到商城索引视图,显示购物车中的项的数目。CartSummary.cshtml 的完整代码,如下所示:

@Html.ActionLink("Cart
(" + ViewData["CartCount"] + ")",
    "Index",
    "ShoppingCart",
    new { id = "cart-status" })

我们可以在站点,包括网站主服务器,通过使用 Html.RenderAction 方法中的任何页面中包括一个局部视图。RenderAction 要求我们指定的操作名称 ("CartSummary") 和控制器名称 ("商城") 作为下面。

@Html.RenderAction("CartSummary",
"ShoppingCart")

在添加之前这到站点布局,我们还将创建流派菜单中,我们可以在所有我们的 Site.master 更新一次。

创建流派菜单局部视图

我们可以很容易为我们的用户,通过添加流派菜单,其中列出了在我们的商店中的各种流派浏览存储区。

我们将遵循同样的步骤还创建一个 GenreMenu 的局部视图,然后我们可以将他们两个添加到网站母版页。首先,添加 StoreController GenreMenu 控制器采取下列行动:

//
// GET: /Store/GenreMenu
[ChildActionOnly]
 public ActionResult GenreMenu()
{
    var genres = storeDB.Genres.ToList();
    return PartialView(genres);
 }

此操作返回流派,将由分部视图,我们下一步将创建显示的列表。

注意: 我们已经添加的 [ChildActionOnly] 属性此控制器操作,指示我们只想要从一个局部视图使用此操作。此属性将会阻止从正在执行的浏览到 /Store/GenreMenu 控制器中的操作。这不是必需的局部视图,但它是一个好的做法,因为我们想要确保我们的控制器操作被用作我们打算。我们也正在返回 PartialView,而不是视图,让我们知道它不应该使用布局的这一观点,因为它被包括在其他视图中,视图引擎。

右键单击 GenreMenu 控制器中的操作,创建一个命名为 GenreMenu,强类型的使用体裁视图的数据类,如下所示的局部视图。

更新要显示的项目使用一个无序的列表,如下所示的 GenreMenu 分部视图的视图代码。

@model IEnumerable<MvcMusicStore.Models.Genre>
<ul id="categories">
    @foreach (var genre in Model)
    {
        <li>@Html.ActionLink(genre.Name,
                "Browse", "Store", 
                new { Genre = genre.Name }, null)
        </li>
    }
</ul>

更新的站点布局,以显示我们部分的意见

我们可以将我们的局部视图添加到站点布局 (/ Views/Shared/_Layout.cshtml) 通过调用 Html.RenderAction()。我们将添加他们两个在以及一些额外的标记,以显示它们,如下所示:

<!DOCTYPE html>
<html>
<head>
    <title>@ViewBag.Title</title>
    <link href="@Url.Content("~/Content/Site.css")"
rel="stylesheet" 
        type="text/css" />
    <script src="@Url.Content("~/Scripts/jquery-1.4.4.min.js")"
        type="text/javascript"></script>
</head>
<body>
    <div id="header">
        <h1><a href="/">ASP.NET MVC MUSIC
STORE</a></h1>
        <ul id="navlist">
            <li class="first">
                <a href="@Url.Content("~")" id="current">
                    Home</a></li>
            <li><a href="@Url.Content("~/Store/")">Store</a></li>
            <li>@{Html.RenderAction("CartSummary", "ShoppingCart");}</li>
            <li><a href="@Url.Content("~/StoreManager/")">
                    Admin</a></li>
        </ul>        
    </div>
    @{Html.RenderAction("GenreMenu", "Store");}
    <div id="main">
        @RenderBody()
    </div>
    <div id="footer">
        built with <a href="http://asp.net/mvc">ASP.NET MVC 3</a>
    </div>
</body>
</html>

现在当我们运行该应用程序,我们将看到在左侧的导航区域中的体裁和顶部的购物车摘要。

更新到商店浏览页面

商店浏览页面程序功能,但不会看起来很好。我们可以更新页后,可以在一个更好的布局中显示相册通过更新视图代码 (在 /Views/Store/Browse.cshtml 中找到),如下所示:

@model MvcMusicStore.Models.Genre
 
@{
    ViewBag.Title = "Browse Albums";
}
 
<div class="genre">
    <h3><em>@Model.Name</em> Albums</h3>
 
    <ul id="album-list">
        @foreach (var album in Model.Albums)
        {
            <li>
                <a href="@Url.Action("Details", 
                    new { id = album.AlbumId })">
                    <img alt="@album.Title" 
                        src="@album.AlbumArtUrl" />
                    <span>@album.Title</span>
                </a>
            </li>
        }
    </ul>
</div>

在这里我们正在使用的 Url.Action,而不是 Html.ActionLink,这样我们可以应用特殊格式的链接,包括专辑插图。

注: 我们显示为这些册页泛型的专辑封面。此信息存储在数据库中,通过存储管理器可编辑。你,欢迎添加您自己的插图。

现在当我们浏览到一个流派,我们将看到一个网格专辑插图中所示的专辑。

更新主页以显示顶部卖专辑

我们想要功能我们最畅销的专辑在主页上以增加销售。我们会给我们的 HomeController 来处理,并添加一些额外的图形,以及在某些更新。

首先,我们将向我们专辑类添加一个导航属性以便 EntityFramework 知道他们是相关联。我们专辑类的最后几行应现在看起来像这样:

public virtual Genre  Genre                  { get; set; }
public virtual Artist Artist                 { get; set; }
public virtual List<OrderDetail>OrderDetails { get; set; }
    }
}

注意: 这将需要添加 using 语句,以使在 System.Collections.Generic 命名空间中。

首先,我们将添加一个 storeDB 字段和使用与我们其他控制器的语句 MvcMusicStore.Models。下一步,我们会将以下方法添加到 HomeController,查询我们的数据库,查找根据明细表的顶尖销售专辑。

private List<Album> GetTopSellingAlbums(int count)
 {
    // Group the order details by album and return
    // the albums with the highest count
    return storeDB.Albums
        .OrderByDescending(a => a.OrderDetails.Count())
        .Take(count)
        .ToList();
}

这是一个私有方法,因为我们不想使它可作为控制器中的操作。我们在为简单起见,HomeController 中包括它但你鼓励将您的业务逻辑移到适当的单独的服务类。

这地方,我们可以更新索引控制器中的操作查询销售的册页的顶部 5 并返回它们的视图。

public ActionResult Index()
{
    // Get most popular albums
    var albums = GetTopSellingAlbums(5);
 
    return View(albums);
 }

更新 HomeController 的完整代码是,如下所示。

using System.Collections.Generic;
 using System.Linq;
 using System.Web.Mvc;
 using MvcMusicStore.Models;
 
namespace MvcMusicStore.Controllers
{
    public class HomeController : Controller
    {
        //
        // GET: /Home/
        MusicStoreEntities storeDB = new MusicStoreEntities();
        public ActionResult Index()
        {
            // Get most popular albums
            var albums = GetTopSellingAlbums(5);
 
            return View(albums);
        }
        private List<Album> GetTopSellingAlbums(int count)
        {
            // Group the order details by album and return
            // the albums with the highest count
            return storeDB.Albums
                .OrderByDescending(a => a.OrderDetails.Count())
                .Take(count)
                .ToList();
        }
    }
}

最后,我们需要更新我们首页索引视图,使它可以通过更新的模型类型和底部添加相册列表中显示出唱片的列表。我们将藉此机会,还向页中添加一个标题和促进科。

@model List<MvcMusicStore.Models.Album>
@{
    ViewBag.Title = "ASP.NET MVC Music Store";
}
<div id="promotion">
</div>
<h3><em>Fresh</em> off the grill</h3>
<ul id="album-list">
    @foreach (var album in Model)
    {
        <li><a href="@Url.Action("Details", "Store",
                new { id = album.AlbumId })">
            <img alt="@album.Title" src="@album.AlbumArtUrl" />
            <span>@album.Title</span>
</a>
        </li>
    }
</ul>

现在当我们运行该应用程序,我们就会看到我们最新的主页与顶尖销售专辑和我们的促销邮件。

结论

我们已经看到,ASP.NET MVC 中,可以轻松创建一个复杂的网站具有数据库访问,成员资格,AJAX,等得很快。希望本教程给你你需要开始构建您自己的 ASP.NET MVC 应用程序的工具 !

标签:10,商店,专辑,视图,MVC,CartSummary,添加,我们
From: https://blog.51cto.com/u_15999672/6951545

相关文章

  • MVC 音乐商店 第 9 部分: 注册和结帐
    MVC音乐商店是介绍,并分步说明了如何使用ASP.NETMVC和VisualStudio为web开发教程应用程序。MVC音乐商店是一个轻量级的示例存储实现它卖音乐专辑在线,并实现基本的网站管理、用户登录,和购物车功能。这个系列教程详细说明所有为构建ASP.NETMVC音乐商店示例应用程序采取......
  • Asp.net MVC 3实例学习之ExtShop(一)————创建应用并设置开发环境
         在VS2010中创建一个如图1所示的“ExtShop”项目,然后在图2的窗口中选择“Empty”,单击“OK”完成项目创建,项目的目录结构和已包含文件如图3所示。     其中,Content文件夹下的Site.css文件是整个网站的CSS文件。Script文件夹中,已包含了jquery的脚本文件。在View目录......
  • 价值100大洋的简体中文汉化补丁下载
    这真逗我啊.....要我怎么说呢...... 总之今天是DT才搞这个汉化补丁 说明两点:1基于繁体中文版,我只是改了简体字库,感谢制作繁体中文的大大(难不成官方做的??)2字库有点挫,我写了下面工具帮忙才搞定总之游戏文字还是有点挫........    中文名:   怪怪水族箱外文名:  ......
  • How to add link parameter to asp tag helpers in ASP.NET Core MVC
    HowtoaddlinkparametertoasptaghelpersinASP.NETCoreMVC问题IhavealotofexperiencewithASP.NETMVC1-5.NowIlearnASP.NETCoreMVCandhavetopassaparametertolinkinpage.ForexampleIhavethefollowingAction[HttpGet]publicAc......
  • LeetCode 热题 100 之 54. 螺旋矩阵
    题目给你一个m行n列的矩阵matrix,请按照顺时针螺旋顺序,返回矩阵中的所有元素。示例1:输入:matrix=[[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例2:输入:matrix=[[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]提示:m==matrix.......
  • AddMvcCore,AddControllers,AddControllersWithViews,AddRazorPages的区别
    AddMvc/AddMvcCore/AddControllers等区别1.services.AddMvcCore()只注册运行 Controller/RazorPages 必要的核心服务,确保 Pipeline 程序可动作,其馀如像 DataAnnotationModelValidation、身分验证等服务要自己加挂,除有特殊客制需求,一般不太常用。2.services.AddControl......
  • Failed to start: app/proxyman/inbound: failed to listen TCP on 10808
    问题现象启动v2xxx-With-Core失败,报错信息如下:2023/08/0311:38:56[Info]infra/conf/serial:Readingconfig:F:\工具\小工具\v2xxx-With-Core\guiConfigs\config.jsonFailedtostart:app/proxyman/inbound:failedtolistenTCPon10808>transport/internet:faile......
  • liunx安装tomcat10
     1、下载软件下载tomcat:https://tomcat.apache.org/查看版本与对应的jdk版本在orace官方下载对应tomcat的jdk版本  -----这里不做展示 2、解压 分别解压到指定目录 (我自己解压在/opt下,看个人需要) tar-xvfapache-tomcat-10.1.11.tar.gz-C/o......
  • CF1610F Mashtali a Space Oddysey
    撞了个题,还做过。将所有奇度给他建个边权为\(1\)的虚边和对应的虚点,图上一定存在欧拉回路,给欧拉回路定向,记录这个边的入边权值为\(1\)还是为\(2\),优先走上一次走的边权。这样跑的话,会将边权抵消,可以取到答案上界,即相连边权为奇数的点数。#include<bits/stdc++.h>usingna......
  • win10 系统下 安装VMware17 安装centos,启动2分钟后卡死 ,win10主机cpu 爆满
    win10系统下安装VMware17安装centos,启动2分钟后卡死,win10主机cpu爆满:请教了高手老师,用下面的方式解决了,哦耶!  被卡死的那滋味真难受啊,问题解决,心情倍儿爽~ ,另一篇搜到的参考文章:记一次解决VMWareUbuntu虚拟机卡死|熊孩子程序员(pkemb.com) ......