ASP.NET MVC--适合新手练习的CRUD(待更新包括筛选,排序,分页)

yusongwhu 2019-12-24

1.打开 Visual Studio 并创建项目使用ASP.NET Web 应用程序 (.NET Framework) 模板。项目命名为自己想要的名字,在这里我将它命名为MyMvc。(不怎么好听哈)

点击确定

ASP.NET MVC--适合新手练习的CRUD(待更新包括筛选,排序,分页)

2.这里我们选择“空”模板,但是可以选择下面的MVC,让vs帮我们添加MVC模式下的文件夹和一些核心的引用,其他项 默认,点击确定

ASP.NET MVC--适合新手练习的CRUD(待更新包括筛选,排序,分页)

3.创建项目成功后,打开我们的解决方案资源管理器,查看项目文件夹结构

ASP.NET MVC--适合新手练习的CRUD(待更新包括筛选,排序,分页)

 这里就创建好我们的一个基本项目啦!但是因为其中没有任何视图以及控制器,所以他还不能够被执行。

在下面的步骤中,我们先来添加主控制器以及视图。

二、添加主控制器及视图

1.在项目资源管理器项目下的Controller文件夹处,右键点击“添加”,选择添加控制器,这里添加一个“空控制器”,带大家一步一步了解一个基本的MVC,

将创建的控制器命名为“HomeController”,点击添加

ASP.NET MVC--适合新手练习的CRUD(待更新包括筛选,排序,分页)

 2.添加成功后,打开我们刚刚创建的HomeController,找到Index()方法,

ASP.NET MVC--适合新手练习的CRUD(待更新包括筛选,排序,分页)

 3.在该方法处点击右键,点击添加视图

ASP.NET MVC--适合新手练习的CRUD(待更新包括筛选,排序,分页)

接受默认选项,直接点击添加

ASP.NET MVC--适合新手练习的CRUD(待更新包括筛选,排序,分页)

vs将会自动帮我们在View文件夹下根据控制器的名称自动创建一个Home文件,Home文件下将会存放一些与Home控制器相关的视图,名称默认会与控制器的Action Method相同 

到这里我们的主控制器和视图就创建好了,点击运行,稍作休息,查看一下效果。

ASP.NET MVC--适合新手练习的CRUD(待更新包括筛选,排序,分页)

4. 我们查看一下View文件夹下的Share文件,找到_ViewStart.cshtml,_ViewStart.cshtml是本项目下所有视图的母版,默认所有视图都会引用该母版,我们稍作修改

(本人怀念一下母校,各位看官可以随意修改),修改一共三处,大家把Application Name和用于展示的名字替换为“想要展示的名称”,例如:

<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>@ViewBag.Title - 内蒙古工业大学</title>
    <link href="~/Content/Site.css" rel="stylesheet" type="text/css" />
    <link href="~/Content/bootstrap.min.css" rel="stylesheet" type="text/css" />
    <script src="~/Scripts/modernizr-2.6.2.js"></script>
</head>

修改后的效果,index看着很不爽啊,来改一下

 ASP.NET MVC--适合新手练习的CRUD(待更新包括筛选,排序,分页)

5.打开View/Home/Index.cshtml,

@{
    ViewBag.Title = "Index";
}

<h2>学生信息</h2>

这样舒服多了吧,

 ASP.NET MVC--适合新手练习的CRUD(待更新包括筛选,排序,分页)

三、添加实体数据模型 

1.找到Models文件,右键添加,选择添加 一个“类”,命名“Student”。

ASP.NET MVC--适合新手练习的CRUD(待更新包括筛选,排序,分页)

 打开创建的Student.cs文件,为Student类添加属性(姓名,性别,注册时间),Enrollments 属性是导航属性。 导航属性中包含与此实体相关的其他实体。

导航属性通常定义为virtual,以便它们可以充分利用 Entity Framework 的特定功能,如延迟加载

public class Student
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Gerder { get; set; }
        public DateTime EnrollmentDate { get; set; }

        public virtual ICollection<Enrollment> Enrollments { get; set; }
    }

2.与上一步相同,添加Course和Enrollment两个实体类,属性如下:

第三行处代码表示不为数据库生成该值,后面我们会手动添加CourseId的值。此处会报错,使用Alt+Enter快捷提示,加入引用就好,

也可以手动输入

using System.ComponentModel.DataAnnotations.Schema;

CourseID 属性是一个外键, Course 是与其对应的导航属性。

public class Course
    {
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        public int CourseId { get; set; }
        public string Title { get; set; }
        public int Credits { get; set; }

        public virtual ICollection<Enrollment> Enrollments { get; set; }

    }

第九行处代码, 问号后Grade类型声明指示Grade属性可以为null。

public enum Grade {
        A,B,C,D,F
    }
    public class Enrollment
    {
        public int EnrollmentId { get; set; }
        public int CourseId { get; set; }
        public int StudentId { get; set; }
        public Grade? Grade { get; set; }


        public virtual Course Course { get; set; }
        public virtual Student Student { get; set; }
    }

3.创建数据库上下文

右键单击项目中的解决方案资源管理器并单击添加,然后单击新文件夹。 将新文件夹命名DAL (适用于数据访问层)。 

ASP.NET MVC--适合新手练习的CRUD(待更新包括筛选,排序,分页)

 在该文件夹中创建名为的新类文件SchoolContext.cs,创建后先生成一下项目,ctrl+shift+B。

确保生成成功后,打开工具栏的NuGet包管理器,选择程序包控制管理器控制台,敲入以下命令

Install-Package EntityFramework

ASP.NET MVC--适合新手练习的CRUD(待更新包括筛选,排序,分页)

 执行成功后,打开SchoolContext.cs,编写数据库上下文

public class SchoolContext : DbContext
    {

        public SchoolContext() : base("SchoolContext") { }

        public DbSet<Student> Students { get; set; }
        public DbSet<Course> Courses { get; set; }
        public DbSet<Enrollment> Enrollments { get; set; }


        /// <summary>
        /// 当派生上下文的模型已初始化时,但在模型被锁定并用于初始化上下文之前,将调用此方法。此方法的默认实现不执行任何操作,但是可以在派生类中重写此方法,以便可以在锁定模型之前对其进行进一步配置。
        /// </summary>
        /// <param name="modelBuilder"></param>
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
        }

    }

4.创建数据库连接字符串

打开项目下的Web.Config,在<configuration>条目下添加链接字符串,name要与SchoolContext数据库上下文中获取到的名称一致。

server=.;-----代表当前数据库
1 <connectionStrings>
2     <add name="SchoolContext" connectionString="server=.;database=IMUTDB;uid=sa;pwd=root;" providerName="System.Data.SqlClient" />
3   </connectionStrings>

5.使用测试数据初始化数据库

在DAL文件夹下,添加SchoolInitializer.cs

public class SchoolInitializer : System.Data.Entity.DropCreateDatabaseIfModelChanges<SchoolContext>
    {
        /// <summary>
        /// Seed方法采用数据库上下文对象作为输入参数,并在方法中的代码使用该对象来将新实体添加到数据库。
        /// </summary>
        /// <param name="context"></param>
        protected override void Seed(SchoolContext context)
        {
            var students = new List<Student>
            {
            new Student{Name="Carson",Gerder="男",EnrollmentDate=DateTime.Parse("2005-09-01")},
            new Student{Name="Meredith",Gerder="女",EnrollmentDate=DateTime.Parse("2002-09-01")},
            new Student{Name="Arturo",Gerder="男",EnrollmentDate=DateTime.Parse("2003-09-01")},
            new Student{Name="Gytis",Gerder="男",EnrollmentDate=DateTime.Parse("2002-09-01")},
            new Student{Name="Yan",Gerder="女",EnrollmentDate=DateTime.Parse("2002-09-01")},
            new Student{Name="Peggy",Gerder="男",EnrollmentDate=DateTime.Parse("2001-09-01")},
            new Student{Name="Laura",Gerder="女",EnrollmentDate=DateTime.Parse("2003-09-01")},
            new Student{Name="Nino",Gerder="男",EnrollmentDate=DateTime.Parse("2005-09-01")}
            };

            students.ForEach(s => context.Students.Add(s));
            context.SaveChanges();
            var courses = new List<Course>
            {
            new Course{CourseId=1050,Title="Chemistry",Credits=3,},
            new Course{CourseId=4022,Title="Microeconomics",Credits=3,},
            new Course{CourseId=4041,Title="Macroeconomics",Credits=3,},
            new Course{CourseId=1045,Title="Calculus",Credits=4,},
            new Course{CourseId=3141,Title="Trigonometry",Credits=4,},
            new Course{CourseId=2021,Title="Composition",Credits=3,},
            new Course{CourseId=2042,Title="Literature",Credits=4,}
            };
            courses.ForEach(s => context.Courses.Add(s));
            context.SaveChanges();
            var enrollments = new List<Enrollment>
            {
            new Enrollment{StudentId=1,CourseId=1050,Grade=Grade.A},
            new Enrollment{StudentId=1,CourseId=4022,Grade=Grade.C},
            new Enrollment{StudentId=1,CourseId=4041,Grade=Grade.B},
            new Enrollment{StudentId=2,CourseId=1045,Grade=Grade.B},
            new Enrollment{StudentId=2,CourseId=3141,Grade=Grade.F},
            new Enrollment{StudentId=2,CourseId=2021,Grade=Grade.F},
            new Enrollment{StudentId=3,CourseId=1050},
            new Enrollment{StudentId=4,CourseId=1050,},
            new Enrollment{StudentId=4,CourseId=4022,Grade=Grade.F},
            new Enrollment{StudentId=5,CourseId=4041,Grade=Grade.C},
            new Enrollment{StudentId=6,CourseId=1045},
            new Enrollment{StudentId=7,CourseId=3141,Grade=Grade.A},
            };
            enrollments.ForEach(s => context.Enrollments.Add(s));
            context.SaveChanges();
        }
    }

四、添加控制器StudentController

1.右键Controller,选择添加控制器,选择包含视图的MVC5控制器(EntityFramework)

ASP.NET MVC--适合新手练习的CRUD(待更新包括筛选,排序,分页)

模类型选择MyMvc.Models.Student,数据库上下文类选择MyMvc.DAL.SchoolContext,其他保留默认选项,点击添加

注意,将控制器名称“StudnetsController”中的s去掉

 ASP.NET MVC--适合新手练习的CRUD(待更新包括筛选,排序,分页)

 这里有可能会发生搭建基架异常的,可以重新生成解决方案(项目解决方案右键--》清理解决方案--》生成解决方案),然后重新生成ctrl+shift+B,一顿操作猛如虎!!!

注:我这里发现了一个问题,在Web.Config中,<configSections>项必须位于<configuration>中的第一项,否则会报错。(一脸懵的错误)

ASP.NET MVC--适合新手练习的CRUD(待更新包括筛选,排序,分页)

2.在Views/Home/ Index.cshtml中加入一个链接

<li>@Html.ActionLink("Show", "Index", "Student")</li>

3.运行项目,点击Show会初始化数据库并跳转到显示界面,这里会需要等待几秒钟,不会很长。

ASP.NET MVC--适合新手练习的CRUD(待更新包括筛选,排序,分页)

 小编这里忘记截图了,项目已经更新了后续的内容,上一张后续功能的运行效果图吧,显示效果差不多

ASP.NET MVC--适合新手练习的CRUD(待更新包括筛选,排序,分页)

 到此,一个简单的CRUD项目就搞定了。

相关推荐

zhangchaoming / 0评论 2020-01-11
林大夏 / 0评论 2019-12-21