C#利用ASP.NET Core开发学生管理系统详解

这里是C#利用ASP.NET Core开发学生管理系统的完整攻略。

步骤一:创建.NET Core Web应用程序

  1. 打开Visual Studio,并以管理员身份运行。
  2. 在Visual Studio中选择“文件”>“新建”>“项目”。
  3. 选择".NET Core"类别,然后选择“ASP.NET Core Web应用程序”模板(或“ASP.NET Core Web应用程序(模型-视图-控制器)”模板)
  4. 为项目命名,并选择合适的位置。
  5. 选择“Web应用程序(.NET Core)”模板,并确保在“身份验证”下选择“无身份验证”。
  6. 创建项目后,可以在文件夹树中看到多个默认文件,包括Controllers和Views文件夹,Startup.cs和Program.cs文件以及wwwroot静态文件夹。

步骤二:连接数据库

  1. 在Visual Studio的“工具”选项中打开“NuGet包管理器控制台”。
  2. 在“包管理器控制台”窗口中,键入以下命令来安装Microsoft.EntityFrameworkCore.Tools包:
Install-Package Microsoft.EntityFrameworkCore.Tools
  1. 随后,安装需要与数据库进行通信的数据库提供程序软件包,如Microsoft.EntityFrameworkCore.SqlServer。
Install-Package Microsoft.EntityFrameworkCore.SqlServer
  1. 在项目文件夹中创建名为“Data”的新文件夹。
  2. 在“Data”文件夹中创建以下上下文类:
using Microsoft.EntityFrameworkCore;
namespace StudentManagementSystem.Models{
public class AppDbContext : DbContext
{
    public AppDbContext(DbContextOptions<AppDbContext> options) : base(options)
    {
    }
    public DbSet<Student> Students { get; set; }
}
}
  1. 打开Startup.cs文件并替换ConfigureServices()方法的代码:
public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContextPool<AppDbContext>(options =>
    options.UseSqlServer(Configuration.GetConnectionString("StudentDBConnection")));
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}

步骤三:创建Model

  1. 在Models文件夹中创建一个名为Student.cs的新类。
namespace StudentManagementSystem.Models{
    public class Student
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public Gender? Gender { get; set; }
        public string Email { get; set; }
        public string PhotoPath { get; set; }
    }
}
  1. 请注意,此类遵循“单个职责原则”,并且只包含与学生相关的信息。

步骤四:创建控制器和视图

  1. 在Controllers文件夹中创建一个名为StudentController.cs的新类。
using Microsoft.AspNetCore.Mvc;
using StudentManagementSystem.Models;
using System.Linq;
namespace StudentManagementSystem.Controllers{
public class StudentController : Controller
{
    private readonly AppDbContext _context;
    public StudentController(AppDbContext context)
    {
        _context = context;
    }
    public IActionResult Index()
    {
        var students = _context.Students.ToList();
        return View(students);
    }
 }
}
  1. 创建“Views”文件夹,然后在该文件夹中创建名为“Student”的新文件夹。
  2. 在“Student”文件夹中创建“Index.cshtml”视图。
@model IEnumerable<StudentManagementSystem.Models.Student>
@{
    ViewData["Title"] = "Index";
}
<table class="table">
    <thead>
        <tr>
            <th>
                @Html.DisplayNameFor(model => model.Name)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Gender)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Email)
            </th>
        </tr>
    </thead>
    <tbody>
        @foreach (var student in Model)
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => student.Name)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => student.Gender)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => student.Email)
                </td>
            </tr>
        }
    </tbody>
</table>
  1. 启动应用程序,然后导航到“https://localhost:44355/Student/Index”以查看学生信息。

示例一:插入数据

以添加一个新学生的过程为例子:

1.在StartUp.cs里面添加头文件:

using StudentManagementSystem.ViewModels;

2.在Models文件夹里面,创建一个新文件夹ViewModels,在该文件夹下创建一个新的类StudentCreateViewModel.cs:

using System.ComponentModel.DataAnnotations;
using StudentManagementSystem.Models;
namespace StudentManagementSystem.ViewModels
{
    public class StudentCreateViewModel
    {
        [Required(ErrorMessage = "请填写名字")]
        [MaxLength(50, ErrorMessage = "名字长度不能超过50个字符")]
        public string Name { get; set; }
        [Required]
        public Gender? Gender { get; set; }
        [Required(ErrorMessage = "请填写电子邮件地址")]
        [EmailAddress(ErrorMessage = "请填写正确的电子邮件地址")]
        public string Email { get; set; }
        public string PhotoPath { get; set; }
    }
}

3.修改StudentController.cs:

public class StudentController : Controller
{
    private readonly AppDbContext _context;
    public StudentController(AppDbContext context)
    {
        _context = context;
    }
    public IActionResult Index()
    {
        var students = _context.Students.ToList();
        return View(students);
    }
    public IActionResult Create()
    {
        return View();
    }
    [HttpPost]
    public IActionResult Create(StudentCreateViewModel model)
    {
        if (ModelState.IsValid)
        {
            var student = new Student
            {
                Name = model.Name,
                Gender = model.Gender,
                Email = model.Email,
                PhotoPath = model.PhotoPath
            };
            _context.Students.Add(student);
            _context.SaveChanges();
            return RedirectToAction("Index");
        }
        return View(model);
    }
}
public IActionResult Create(StudentCreateViewModel model)
{
    if (ModelState.IsValid)
    {
        var student = new Student
        {
            Name = model.Name,
            Gender = model.Gender,
            Email = model.Email,
            PhotoPath = model.PhotoPath
        };
        _context.Students.Add(student);
        _context.SaveChanges();
        return RedirectToAction("Index");
    }
    return View(model);
}

4.修改Views/Student中的Create.cshtml:

@model StudentManagementSystem.ViewModels.StudentCreateViewModel
@{
    ViewData["Title"] = "Create";
}
<h2>Create</h2>
<form asp-action="Create" enctype="multipart/form-data">
    <div asp-validation-summary="ModelOnly" class="text-danger"></div>
    <div class="form-group">
        <label asp-for="Name" class="control-label"></label>
        <input asp-for="Name" class="form-control" />
        <span asp-validation-for="Name" class="text-danger"></span>
    </div>
    <div class="form-group">
        <label asp-for="Gender" class="control-label"></label>
        <select asp-for="Gender" class="form-control">
            <option value="">---请选择性别---</option>
            <option value="0">女</option>
            <option value="1">男</option>
        </select>
        <span asp-validation-for="Gender" class="text-danger"></span>
    </div>
    <div class="form-group">
        <label asp-for="Email" class="control-label"></label>
        <input asp-for="Email" class="form-control" />
        <span asp-validation-for="Email" class="text-danger"></span>
    </div>
    <div class="form-group">
        <label asp-for="PhotoPath" class="control-label"></label>
        <input asp-for="PhotoPath" type="file" />
        <span asp-validation-for="PhotoPath" class="text-danger"></span>
    </div>
    <div class="form-group">
        <input type="submit" value="Create" class="btn btn-primary" />
    </div>
</form>
<div>
    <a asp-action="Index">Back to List</a>
</div>

5.访问https://localhost:44355/Student/Create,可以显示表单;在必填项中填入信息,提交表单后数据有效性检查结果正确,数据被插入。

示例二:编辑和删除数据

以编辑和删除学生信息为例:

1.在Views/Student中的Index.cshtml中添加编辑和删除按钮:

<td>
    <a asp-action="Edit" asp-route-id="@student.Id">编辑</a>
    <a asp-action="Delete" asp-route-id="@student.Id" class="btn btn-danger"
       onclick="return confirm('Are you sure to delete?')">删除</a>
</td>

2.在StudentController.cs添加Edit()方法:

public IActionResult Edit(int id)
{
    var student = _context.Students.Find(id);
    if (student == null)
    {
        return NotFound();
    }
    var studentEditViewModel = new StudentEditViewModel
    {
        Id = student.Id,
        Name = student.Name,
        Gender = student.Gender,
        Email = student.Email,
        ExistingPhotoPath = student.PhotoPath
    };
    return View(studentEditViewModel);
}

3.在ViewModels文件夹中创建StudentEditViewModel.cs:

using StudentManagementSystem.Models;
namespace StudentManagementSystem.ViewModels
{
    public class StudentEditViewModel : StudentCreateViewModel
    {
        public int Id { get; set; }
        public string ExistingPhotoPath { get; set; }
    }
}

4.修改Views/Student中的Edit.cshtml:

@model StudentManagementSystem.ViewModels.StudentEditViewModel
@{
    ViewData["Title"] = "Edit";
}
<h2>Edit</h2>
<form asp-action="Edit">
    @Html.HiddenFor(model => model.Id)
    <div asp-validation-summary="ModelOnly" class="text-danger"></div>
    <div class="form-group">
        <label asp-for="Name" class="control-label"></label>
        <input asp-for="Name" class="form-control" />
        <span asp-validation-for="Name" class="text-danger"></span>
    </div>
    <div class="form-group">
        <label asp-for="Gender" class="control-label"></label>
        <select asp-for="Gender" class="form-control">
            <option value="">---请选择性别---</option>
            <option value="0">女</option>
            <option value="1">男</option>
        </select>
        <span asp-validation-for="Gender" class="text-danger"></span>
    </div>
    <div class="form-group">
        <label asp-for="Email" class="control-label"></label>
        <input asp-for="Email" class="form-control" />
        <span asp-validation-for="Email" class="text-danger"></span>
    </div>
    <div class="form-group">
        <input type="hidden" asp-for="ExistingPhotoPath" />
        <label asp-for="PhotoPath" class="control-label"></label>
        <input asp-for="PhotoPath" class="form-control" />
        <span asp-validation-for="PhotoPath" class="text-danger"></span>
    </div>
    <div class="form-group">
        <img src="@Model.ExistingPhotoPath" alt="个人照片" style="max-height: 200px" />
    </div>
    <div class="form-group">
        <input type="submit" value="提交" class="btn btn-primary" />
    </div>
</form>
<div>
    <a asp-action="Index">返回</a>
</div>

5.在StudentController.cs添加Edit()方法中添加相应的HttpPost方法:

[HttpPost]
public IActionResult Edit(StudentEditViewModel model)
{
    if (ModelState.IsValid)
    {
        var student = _context.Students.Find(model.Id);
        if (student == null)
        {
            return NotFound();
        }
        student.Name = model.Name;
        student.Gender = model.Gender;
        student.Email = model.Email;
        student.PhotoPath = model.PhotoPath;
        _context.SaveChanges();
        return RedirectToAction("Index");
    }
    return View(model);
}

6.添加Delete()方法:

public IActionResult Delete(int id)
{
    var student = _context.Students.Find(id);
    if (student == null)
    {
        return NotFound();
    }
    _context.Students.Remove(student);
    _context.SaveChanges();
    return RedirectToAction("Index");
}

7.访问https://localhost:44355/Student/Index,可以看到每个学生条目后面都有一个编辑和删除链接。点击“编辑”链接会打开编辑页并显示学生信息。在编辑页上提交表单后,数据已被更新。点击“删除”链接将删除相应的学生信息。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#利用ASP.NET Core开发学生管理系统详解 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • AspNetPager分页控件源代码(Version 4.2)第2/2页

    分页控件是网站开发中非常常用的一个控件,它可以将数据分页显示,并提供页码、跳转等功能,能够方便用户浏览大量内容。下面我将详细讲解AspNetPager分页控件的使用方法和源代码。 安装AspNetPager分页控件 在使用AspNetPager分页控件之前,我们需要先将其安装到项目中,具体方法如下: 1. 下载AspNetPager分页控件 我们可以从NuG…

    C# 2023年5月31日
    00
  • C# 制作PictureBox圆形头像框并从数据库中读取头像

    这里是制作C# Windows Form应用程序中PictureBox圆形头像框并从数据库中读取头像的完整攻略。在这个攻略中,你将学习如何: 在Windows Form中创建一个PictureBox控件。 将PictureBox控件转换为圆形形状。 从数据库中读取图像数据,并将其显示在PictureBox控件中。 封装代码使其可以在多个窗体和应用程序中重复使…

    C# 2023年5月31日
    00
  • C#获取并修改文件扩展名的方法

    一、标题 C#获取并修改文件扩展名的方法 二、背景 在使用C#进行文件操作的过程中,有时需要获取文件的扩展名并对其进行修改。下面将介绍一种获取和修改文件扩展名的方法。 三、方法 使用C#中的Path类可以获取文件的扩展名,同时也可以通过更改文件名的方法来对扩展名进行修改。 获取文件扩展名 使用Path类中的GetExtension()方法获取文件的扩展名,该…

    C# 2023年6月1日
    00
  • C#语法新特性之元组实例详解

    C#语法新特性之元组实例详解 什么是元组? 元组是C# 7.0版本引入的一种新的类型,它可以存储一组数据,而不是单一类型的数据。它的出现使得我们可以更方便地组合和传递数据。 元组可以用于处理多个返回值,而不必引入一个专门的类型来保存它们。元组内部可以存储不同类型的数据,这是它与数组和列表等常规集合类型的主要区别。 如何使用元组? 创建元组 创建元组很简单,可…

    C# 2023年5月31日
    00
  • 在 C# 中使用 Span 和 Memory 编写高性能代码的详细步骤

    在 C# 中,Span 和 Memory 是用于优化代码性能的关键类型。Span 是一种结构体类型,它将对象内存表示为连续的、可编辑的范围。Memory 则是一个类类型,可以包装一段内存以及操作该内存的方法。使用这两种类型,可以使代码更高效地使用内存和更快地执行。 下面介绍一些使用 Span 和 Memory 编写高性能代码的详细步骤。 步骤一:创建 Spa…

    C# 2023年6月3日
    00
  • C#中怎样从指定字符串中查找并替换字符串?

    在C#中,我们可以使用Replace方法来查找和替换指定字符串中的内容。它的语法结构如下所示: string.Replace(string oldValue, string newValue); 其中,oldValue参数是要查找并替换的旧字符串值,newValue参数是要替换成的新字符串值。 以下是一个示例,我们希望将字符串中的”hello”替换为”hi”…

    C# 2023年6月6日
    00
  • C#省份城市下拉框联动简单实现方法

    当用户需要在网页上选择省份和城市时,通常会使用联动下拉框,即选择省份后再根据省份的选择来显示相应的城市。C#作为一种常见的后端语言,其实现联动下拉框非常简单。下面我们来详细讲解”C#省份城市下拉框联动简单实现方法”。 其实现步骤如下: 1.前端页面设计 首先我们需要一个前端页面,用于展示下拉框。在这个页面中,我们需要提供两个下拉框,一个选择省份,一个选择城市…

    C# 2023年5月31日
    00
  • ASP.NET Core MVC 从入门到精通之布局

    随着技术的发展,ASP.NET Core MVC也推出了好长时间,经过不断的版本更新迭代,已经越来越完善,本系列文章主要讲解ASP.NET Core MVC开发B/S系统过程中所涉及到的相关内容,适用于初学者,在校毕业生,或其他想从事ASP.NET Core MVC 系统开发的人员。 经过前几篇文章的讲解,初步了解ASP.NET Core MVC项目创建,启…

    C# 2023年4月22日
    00
合作推广
合作推广
分享本页
返回顶部