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

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

学习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 编程系列七——修改列表页面post

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

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

 

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

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

          咱们首先在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),或是菜单中选择生成-->生成解决方案

 

 

2、给列表页面添加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字段。

 

3、有几种方法能够解决这个错误

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

二、经过SQL Server Management Studio显式修改现有数据库中的表,使之与实体类相匹配。这种方法的优势是能够保存数据。您能够手动或经过建立数据库更改脚原本进行更改。

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

相关文章
相关标签/搜索