学习ASP.NET Core Razor 编程系列十——添加新字段

简介: 原文:学习ASP.NET Core Razor 编程系列十——添加新字段学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体  学习ASP.
原文: 学习ASP.NET Core Razor 编程系列十——添加新字段

学习ASP.NET Core Razor 编程系列目录

学习ASP.NET Core Razor 编程系列一

学习ASP.NET Core Razor 编程系列二——添加一个实体

 学习ASP.NET Core Razor 编程系列三——创建数据表及创建项目基本页面

学习ASP.NET Core Razor 编程系列四——Asp.Net Core Razor列表模板页面

学习ASP.NET Core Razor 编程系列五——Asp.Net Core Razor新建模板页面

学习ASP.NET Core Razor 编程系列六——数据库初始化

学习ASP.NET Core Razor 编程系列七——修改列表页面

学习ASP.NET Core Razor 编程系列八——并发处理

学习ASP.NET Core Razor 编程系列九——增加查询功能

 

       在经过了上面几篇文章的学习这宾,本篇文章我们来学习如何在已经的功能中添加新字段。

一、添加出版社字段到实体类

          我们首先在Visual Studio 2017的解决方案资源管理器中打开 Models/Books.cs 文件,并添加一个Publishing字段,代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;
 

namespace RazorMvcBooks.Models
{
    public class Book
    {  

        public int ID { get; set; }
        public string Name { get; set; }

        [Display(Name = "出版日期")]
        [DataType(DataType.Date)] 

        public DateTime ReleaseDate { get; set; }

        public string Author { get; set; }
        public decimal Price { get; set; }
        public string Publishing { get; set; }

    }

}

          在Visual Studio 2017中按下(Ctrl+Shift+B),或是菜单中选择生成-->生成解决方案

 

 

二、给列表页面添加Publishing字段

             在Visual Studio 2017的解决方案资源管理器中找到 Pages/Books/Index.cshtml文件,然后使用鼠标双击打开,并在文件中添加Publishing字段,代码如下:

@page 
@model RazorMvcBooks.Pages.Books.IndexModel 

@{
    ViewData["Title"] = "Index";
} 

<h2>Index</h2>

<p>
    <a asp-page="Create">Create New</a>
</p>
<form>
    <p>
        <select asp-for="Author" asp-items="Model.Authors">
            <option value="">All</option>
        </select>
书籍名称
         <input type="text" name="SearchString">
        <input type="submit" value="查询" />
    </p>
</form>
 
<table class="table">
    <thead>
        <tr>
                <th>
                    @Html.DisplayNameFor(model => model.Book[0].Name)

                </th>
                <th>
                    @Html.DisplayNameFor(model => model.Book[0].ReleaseDate)

                </th>
                <th>
                    @Html.DisplayNameFor(model => model.Book[0].Author)

                </th>
                <th>
                    @Html.DisplayNameFor(model => model.Book[0].Price)

                </th>
            <th>
                @Html.DisplayNameFor(model => model.Book[0].Publishing)

            </th>
            <th></th>
        </tr>
    </thead>
    <tbody>
@foreach (var item in Model.Book) {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.Name)

            </td>
            <td>
                @Html.DisplayFor(modelItem => item.ReleaseDate)

            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Author)

            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Price)

            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Publishing)

            </td>
            <td>

                <a asp-page="./Edit" asp-route-id="@item.ID">Edit</a> |

                <a asp-page="./Details" asp-route-id="@item.ID">Details</a> |
                <a asp-page="./Delete" asp-route-id="@item.ID">Delete</a>
            </td>
        </tr>
}
    </tbody>
</table>

 

      按照上面的方式,把Publishing字段添加到“Delete.cshtml”与“Details.cshtml”页面中。

       接下来我们在Visual Studio 2017的解决方案资源管理器中打开Create.cshtml,然后选择一个现成<div>元素(例如包含Name字段的div元素),复制,粘贴到如下图的位置,最后把Name修改为Publishing字段。如下图。

 

添加了Publishing字段之后 Create.cshtml  代码如下:

@page
@model RazorMvcBooks.Pages.Books.CreateModel
@{

    ViewData["Title"] = "Create";
} 

<h2>Create</h2> 

<h4>Book</h4>
<hr />
<div class="row">
    <div class="col-md-4">
        <form method="post">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>

            <div class="form-group">
                <label asp-for="Book.Name" class="control-label"></label>

                <input asp-for="Book.Name" class="form-control" />
                <span asp-validation-for="Book.Name" class="text-danger"></span>
            </div>

            <div class="form-group">
                <label asp-for="Book.ReleaseDate" class="control-label"></label>
                <input asp-for="Book.ReleaseDate" class="form-control" />
                <span asp-validation-for="Book.ReleaseDate" class="text-danger"></span>
            </div>

            <div class="form-group">
                <label asp-for="Book.Author" class="control-label"></label>

                <input asp-for="Book.Author" class="form-control" />
                <span asp-validation-for="Book.Author" class="text-danger"></span>
            </div> 

            <div class="form-group">
                <label asp-for="Book.Price" class="control-label"></label>
                <input asp-for="Book.Price" class="form-control" />
                <span asp-validation-for="Book.Price" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Book.Publishing" class="control-label"></label>
                <input asp-for="Book.Publishing" class="form-control" />

                <span asp-validation-for="Book.Publishing" class="text-danger"></span>
            </div>
            <div class="form-group">
                <input type="submit" value="Create" class="btn btn-default" />

            </div>
        </form>
    </div>
</div> 

<div>
    <a asp-page="Index">Back to List</a>
</div> 

@section Scripts {
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}

 

      参照上面的方式给编辑页面添加Publishing字段。

      在经过上面的修改之后,但是由于我们还没有进行数据库更新,所以此时运行书籍管理信息系统是会报错的。

     此时如果我们在Visual Studio 2017中按下F5,在浏览器中我们会得到如下图的错误信息。

         这个错误信息表明我们的实体类与数据库中的表结构不一致。数据库中Book表没有Publishing字段。

 

三、有几种方法可以解决这个错误

1、让实体框架自动删除并使用新的实体类重新创建数据库。这种方法适合在开发周期的早期使用;它允许您快速地将实体类和数据库表一起快速改进。缺点是丢失数据库中的现有数据。请不要在生产数据库上使用这种方法!在架构更改时删除数据库并使用初始化类自动地用测试数据生成数据库中的数据,这通常是开发应用程序的一种有效方式。

2、通过SQL Server Management Studio显式修改现有数据库中的表,使之与实体类相匹配。这种方法的优点是可以保存数据。您可以手动或通过创建数据库更改脚本来进行更改。

3、使用 Code First 迁移功能来更新数据库。我们将在下一篇文章中进行学习。

 

 

目录
相关文章
|
6天前
|
开发框架 NoSQL .NET
利用分布式锁在ASP.NET Core中实现防抖
【9月更文挑战第5天】在 ASP.NET Core 中,可通过分布式锁实现防抖功能,仅处理连续相同请求中的首个请求,其余请求返回 204 No Content,直至锁释放。具体步骤包括:安装分布式锁库如 `StackExchange.Redis`;创建分布式锁服务接口及其实现;构建防抖中间件;并在 `Startup.cs` 中注册相关服务和中间件。这一机制有效避免了短时间内重复操作的问题。
|
16天前
|
开发框架 监控 .NET
开发者的革新利器:ASP.NET Core实战指南,构建未来Web应用的高效之道
【8月更文挑战第28天】本文探讨了如何利用ASP.NET Core构建高效、可扩展的Web应用。ASP.NET Core是一个开源、跨平台的框架,具有依赖注入、配置管理等特性。文章详细介绍了项目结构规划、依赖注入配置、中间件使用及性能优化方法,并讨论了安全性、可扩展性以及容器化的重要性。通过这些技术要点,开发者能够快速构建出符合现代Web应用需求的应用程序。
30 0
|
16天前
|
缓存 数据库连接 API
Entity Framework Core——.NET 领域的 ORM 利器,深度剖析其最佳实践之路
【8月更文挑战第28天】在软件开发领域,高效的数据访问与管理至关重要。Entity Framework Core(EF Core)作为一款强大的对象关系映射(ORM)工具,在 .NET 开发中扮演着重要角色。本文通过在线书店应用案例,展示了 EF Core 的核心特性和优势。我们定义了 `Book` 实体类及其属性,并通过 `BookStoreContext` 数据库上下文配置了数据库连接。EF Core 提供了简洁的 API,支持数据的查询、插入、更新和删除操作。
36 0
|
20天前
|
开发框架 监控 .NET
【Azure 应用程序见解】在Docker中运行的ASP.NET Core应用如何开启Application Insights的Profiler Trace呢?
【Azure 应用程序见解】在Docker中运行的ASP.NET Core应用如何开启Application Insights的Profiler Trace呢?
|
20天前
|
Linux C# C++
【Azure App Service For Container】创建ASP.NET Core Blazor项目并打包为Linux镜像发布到Azure应用服务
【Azure App Service For Container】创建ASP.NET Core Blazor项目并打包为Linux镜像发布到Azure应用服务
|
29天前
|
存储 开发框架 .NET
ASP.NET Web Api 使用 EF 6,DateTime 字段如何取数据库服务器当前时间
ASP.NET Web Api 使用 EF 6,DateTime 字段如何取数据库服务器当前时间
|
29天前
|
程序员 数据库
分享 2 个 .NET EF 6 只更新某些字段的方法
分享 2 个 .NET EF 6 只更新某些字段的方法
|
29天前
|
开发框架 .NET API
如何在 ASP.NET Core Web Api 项目中应用 NLog 写日志?
如何在 ASP.NET Core Web Api 项目中应用 NLog 写日志?
|
6天前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
19 7
|
5天前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
14 0