学习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 迁移功能来更新数据库。我们将在下一篇文章中进行学习。

 

 

目录
相关文章
|
22天前
|
消息中间件 前端开发 小程序
一个基于.NET Core构建的简单、跨平台、模块化的商城系统
今天大姚给大家分享一个基于.NET Core构建的简单、跨平台、模块化、完全开源免费(MIT License)的商城系统:Module Shop。
|
22天前
|
算法 C# 数据库
【干货】一份10万字免费的C#/.NET/.NET Core面试宝典
C#/.NET/.NET Core相关技术常见面试题汇总,不仅仅为了面试而学习,更多的是查漏补缺、扩充知识面和大家共同学习进步。该知识库主要由自己平时学习实践总结、网上优秀文章资料收集(这一部分会标注来源)和社区小伙伴提供三部分组成。该份基础面试宝典完全免费,发布两年来收获了广大.NET小伙伴的好评,我会持续更新和改进,欢迎关注我的公众号【追逐时光者】第一时间获取最新更新的面试题内容。
|
22天前
|
数据可视化 网络协议 C#
C#/.NET/.NET Core优秀项目和框架2024年3月简报
公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架(每周至少会推荐两个优秀的项目和框架当然节假日除外),公众号推文中有项目和框架的介绍、功能特点、使用方式以及部分功能截图等(打不开或者打开GitHub很慢的同学可以优先查看公众号推文,文末一定会附带项目和框架源码地址)。注意:排名不分先后,都是十分优秀的开源项目和框架,每周定期更新分享(欢迎关注公众号:追逐时光者,第一时间获取每周精选分享资讯🔔)。
|
5天前
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
14 0
|
20天前
|
Linux API iOS开发
.net core 优势
.NET Core 的优势:跨平台兼容(Windows, macOS, Linux)及容器支持,高性能,支持并行版本控制,丰富的新增API,以及开源。
25 4
|
1月前
|
开发框架 人工智能 .NET
C#/.NET/.NET Core拾遗补漏合集(持续更新)
C#/.NET/.NET Core拾遗补漏合集(持续更新)
|
3月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
44 0
|
1月前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界
32 0
|
1月前
|
开发框架 前端开发 .NET
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
101 5
|
8月前
|
存储 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(五)
经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面,商品详情等功能的开发,今天继续讲解购物车功能开发,仅供学习分享使用,如有不足之处,还请指正。
118 0