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

时间:2018-09-29 14:12:05 浏览量:276 阅读时间:15.77 分钟

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

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

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

打赏

感谢您的支持,我会继续努力的!


支付宝
注册用户登录后才能发表评论,请 登录 注册,请访问 网站首页。
总计(0)条评论

admin

软件工程师

    文章目录

    返回顶部小火箭