【C# 10 和 .NET 6】使用MVC模式构建网站(笔记2)

【C# 10 和 .NET 6】使用MVC模式构建网站(笔记2)_第1张图片

3. 自定义 ASP.NET Core MVC 网站

现在您已经了解了基本 MVC 网站的结构,您将对其进行自定义和扩展。您已经为 Northwind 数据库注册了一个 EF Core 模型,因此下一个任务是在主页上输出一些数据。

3.1 定义自定义样式

主页将显示 Northwind 数据库中77 种产品的列表。为了有效利用空间,我们希望以三列显示列表。为此,我们需要为网站自定义样式表

  1. 在 wwwroot\css 文件夹中,打开 site.css 文件。

  2. 在文件的底部,添加将应用于具有product-columns(产品列) ID 的元素的新样式,如以下代码所示:

    #product-columns {
    column-count: 3;
    }

3.2 设置类别图像

Northwind 数据库包括一个包含八个类别的表格,但它们没有图像,并且网站上有一些彩色图片看起来更好:

  1. 在 wwwroot 文件夹中,创建一个名为 images 的文件夹。

  2. 在images文件夹中添加category1.jpeg、category2.jpeg等八个图片文件,直至category8.jpeg。

您可以通过以下链接从本书的 GitHub 存储库下载图像:https://github.com/markjprice/cs10dotnet6/tree/master/Assets/Categories


3.3 了解 Razor 语法

在我们自定义主页视图之前,让我们回顾一个示例 Razor 文件,该文件具有一个初始 Razor 代码块,该代码块使用价格和数量实例化订单,然后在网页上输出有关订单的信息,如以下标记所示:

@{
    Order order = new()
    {
        OrderId = 123,
        Product = "Sushi",
        Price = 8.49M,
        Quantity = 3
    };
}

Your order for @order.Quantity of @order.Product has a total cost of [email protected] * @order.Quantity

前面的 Razor 文件会导致以下不正确的输出
Your order for 3 of Sushi has a total cost of $8.49 * 3

尽管 Razor 标记可以使用 @object 包含任何单个属性的值。属性语法,您应该将表达式括在括号中,如以下标记所示:

Your order for @order.Quantity of @order.Product has a total cost of $@(order.Price * order.Quantity)

前面的Razor 表达式导致以下正确输出
Your order for 3 of Sushi has a total cost of $25.47


3.4 定义typed view类型视图

要在编写视图时改进 IntelliSense,您可以使用顶部的 @model 指令定义视图可以期望的类型

  1. 在 Views\Home 文件夹中,打开 Index.cshtml

  2. 在文件的顶部,添加一条语句来设置模型类型以使用
    HomeIndexViewModel,如下代码所示:
    @model HomeIndexViewModel

    现在,每当我们在此视图中键入 Model 时,您的代码编辑器都会知道模型的正确类型,并会为其提供 IntelliSense。在视图中输入代码时,请记住以下几点:

    让我们继续自定义主页的视图。

  • 声明模型的类型,使用@model(带有小写的m)

  • 与模型实例交互,使用@Model(带有大写的M)

在最初的 Razor 代码块中,添加一条语句为当前项目声明一个字符串变量,并在现有的

元素下添加新markup标记,以在轮播中输出类别和产品输出为无序列表,如下标记所示:

@using Packt.Shared
@using Northwind.Common
@model HomeIndexViewModel //小写model    
@{
    ViewData["Title"] = "Home Page";
    string currentItem = "";
    WeatherForecast[]? weather = ViewData["weather"] as WeatherForecast[];
}

@if (Model is not null)  // 大写Model 
{   
    
}

Northwind

We have had @Model?.VisitorCount visitors this month.

Query customers from a service

Query products by price

@if (Model is not null) {

Products

}

查看前面的 Razor 标记时,请注意以下事项:

• 很容易将

你可能感兴趣的:(c#,.net,mvc,笔记,开发语言)