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日

相关文章

  • asp中用insert into语句向数据库插入记录(添加信息)的方法

    以下是详细讲解“asp中用insert into语句向数据库插入记录(添加信息)的方法”的完整攻略: 1. 连接数据库 在使用insert into语句插入记录之前,我们需要首先连接到数据库,使用ADODB.Connection对象可以实现数据库连接。连接数据库的代码如下: <% ‘Recordset对象用于存储和处理从数据库中检索出来的数据 Dim …

    C# 2023年5月31日
    00
  • asp.net微信开发(自定义会话管理)

    ASP.NET微信开发自定义会话管理攻略 1. 简介 微信公众号开发需要用到微信的会话管理,微信提供了默认的会话功能,但是很多时候,开发者的业务需求与微信默认的会话功能并不完全匹配,这时候就需要自定义会话管理。本攻略就是讲解如何通过ASP.NET开发自定义会话管理。 2. 实现步骤 2.1 SessionState模式 微信的会话管理需要依赖ASP.NET的…

    C# 2023年6月3日
    00
  • ASPNET中JSON的序列化和反序列化的方法

    ASP.NET 是一个非常流行的 Web 应用程序架构,通常用于基于 Microsoft 技术栈的 Web 应用程序。而 JSON 是一种轻量级的数据交换格式,越来越多地在 Web 应用程序中使用。在 ASP.NET 中,我们可以使用内置的序列化和反序列化方法来将对象转换为 JSON 格式,以及将 JSON 数据反序列化为对象。 1. JSON 序列化 1.…

    C# 2023年5月31日
    00
  • C#实现给定字符串生成MD5哈希的方法

    下面是“C#实现给定字符串生成MD5哈希的方法”的完整攻略: 步骤一:导入命名空间 首先需要在代码中导入System.Security.Cryptography命名空间,它包含了实现MD5算法的相关类。 using System.Security.Cryptography; 步骤二:编写方法 接下来,需要编写一个方法来生成给定字符串的MD5哈希值。具体的代码…

    C# 2023年6月7日
    00
  • c# Base64编码和图片的互相转换代码

    下面是关于“c# Base64编码和图片的互相转换代码”的完整攻略: Base64编码 Base64编码是将二进制数据通过64个可打印字符来表示的一种编码方式。在C#中,我们可以使用Convert.ToBase64String()方法将一个byte数组进行Base64编码,方法原型如下: public static string ToBase64String…

    C# 2023年6月3日
    00
  • asp.net(c#)判断远程图片是否存在

    当我们在使用asp.net(c#)获取远程图片时,我们需要先判断该图片是否存在。为了判断图片是否存在,我们可以使用HTTP协议的HEAD请求方法。HEAD请求方法会返回HTTP头信息,但不会返回HTTP body信息。如果返回状态码为200,说明该图片存在;如果返回状态码为404,说明该图片不存在。 下面是使用C#代码判断远程图片是否存在的完整攻略: 步骤一…

    C# 2023年6月3日
    00
  • ASP.NET输出PNG图片时出现GDI+一般性错误的解决方法

    ASP.NET输出PNG图片时出现GDI+一般性错误,通常表示出现了一些问题导致服务器无法正常处理图像。以下是解决该问题的完整攻略: 1. 了解GDI+错误 首先,我们需要了解GDI+错误是什么,以及为什么会出现。GDI+是Windows平台下的一种图像库,ASP.NET使用GDI+来生成和处理图像。当出现GDI+错误时,通常会伴随着一些错误消息,如“一般性…

    C# 2023年6月6日
    00
  • asp.net 关于字符串内范围截取的一点方法总结

    下面是关于”asp.net 关于字符串内范围截取的一点方法总结”的完整攻略: 标题 背景介绍 在asp.net的开发中,我们经常需要对字符串进行截取操作。这个过程中涉及到字符串的长度、起始位置、截取长度等多个参数的填写。本文将对这些参数的关系进行总结,并介绍一些常见的截取操作方法,帮助读者更好地掌握字符串截取操作。 方法总结 Substring方法 stri…

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