C# ASP.NET Core开发学生信息管理系统(三)

简介: C# ASP.NET Core开发学生信息管理系统(三)

随着技术的进步,跨平台开发已经成为了标配,在此大背景下,ASP.NET Core也应运而生。本文主要利用ASP.NET Core开发一个学生管理系统为例,简述ASP.NET Core开发的常见知识点,前两篇文章做了登录功能和主页面功能,本文继续分享学生信息页面的增删改查功能。仅供学习分享使用,如有不足之处,还请指正。

涉及知识点

开发学生管理系统,涉及知识点,如下所示:

创建模型

如果要对学生进行管理,则首先需要创建学生模型,如下所示:

1. namespace SMS.Models
2. {
3. public class Student
4.     {
5. /// <summary>
6. /// 唯一标识
7. /// </summary>
8. public int Id { get; set; }
9. 
10. /// <summary>
11. /// 学号
12. /// </summary>
13. public string No { get; set; }
14. 
15. /// <summary>
16. /// 学生名称
17. /// </summary>
18. public string Name { get; set; }
19. 
20. /// <summary>
21. /// 年纪
22. /// </summary>
23. public int Age { get; set; }
24. 
25. /// <summary>
26. /// 性别
27. /// </summary>
28. public Boolean Sex { get; set; }
29. 
30. /// <summary>
31. /// 专业
32. /// </summary>
33. public string Dept { get; set; }
34. 
35. /// <summary>
36. /// 年级
37. /// </summary>
38. public string Grade { get; set; }
39. 
40. /// <summary>
41. /// 班级
42. /// </summary>
43. public string Class { get; set; }
44.     }
45. }

创建控制器

学生控制器(StudentController),如下所示:

1. namespace SMS.Controllers
2. {
3. public class StudentController : Controller
4.     {
5. private readonly ILogger<HomeController> _logger;
6. 
7. private DataContext dataContext;
8. 
9. public StudentController(ILogger<HomeController> logger, DataContext context) {
10.             _logger = logger;
11.             dataContext = context;
12.         }
13. 
14. /// <summary>
15. /// 学生信息首页
16. /// </summary>
17. /// <returns></returns>
18. public IActionResult Index()
19.         {
20. return View();
21.         }
22. 
23. /// <summary>
24. /// 获取学生信息
25. /// </summary>
26. /// <param name="Name"></param>
27. /// <returns></returns>
28.         [HttpPost]
29. public JsonResult Query(string Name) {
30. var students = new List<Student>();
31. if (string.IsNullOrEmpty(Name))
32.             {
33.                 students = dataContext.Students.ToList();
34. 
35.             }
36. else {
37.                 students = dataContext.Students.Where(r => r.Name.Contains(Name)).ToList();
38.             }
39. 
40. return Json(students);
41.         }
42. 
43. /// <summary>
44. /// 新增
45. /// </summary>
46. /// <returns></returns>
47.         [HttpGet]
48. public IActionResult Add() {
49. return View();
50.         }
51. 
52. /// <summary>
53. /// 编辑
54. /// </summary>
55. /// <param name="id"></param>
56. /// <returns></returns>
57. public IActionResult Edit(int id) {
58. var student = dataContext.Students.FirstOrDefault((s) => s.Id == id);
59. return View(student);
60.         }
61. 
62. /// <summary>
63. /// 新增保存
64. /// </summary>
65. /// <param name="student"></param>
66. /// <returns></returns>
67.         [HttpPost]
68. public JsonResult Save(Student student) {
69.            dataContext.Students.Add(student);
70.             dataContext.SaveChanges();
71. if (student.Id > 0)
72.             {
73. return Json("Success");
74.             }
75. else {
76. return Json("Failure");
77.             }
78.         }
79. 
80. /// <summary>
81. /// 编辑保存
82. /// </summary>
83. /// <param name="student"></param>
84. /// <returns></returns>
85.         [HttpPost]
86. public JsonResult Save2(Student student) {
87. var id = student.Id;
88. if (id == 0)
89.             {
90. //新增
91. return Save(student);
92.             }
93. else {
94. var tmp = dataContext.Students.FirstOrDefault(s => s.Id == id);
95. if (tmp != null) {
96.                     tmp.Name = student.Name;
97.                     tmp.Age = student.Age;
98.                     tmp.Class = student.Class;
99.                     tmp.Dept = student.Dept;
100.                     tmp.Sex = student.Sex;
101.                     tmp.No = student.No;
102. int num = dataContext.SaveChanges();
103. if (num > 0)
104.                     {
105. return Json("Success");
106.                     }
107. else {
108. return Json("Failure");
109.                     }
110.                 }
111. return Json("Error");
112.             }
113.         }
114. 
115. /// <summary>
116. /// 删除
117. /// </summary>
118. /// <param name="id"></param>
119. /// <returns></returns>
120.         [HttpPost]
121. public JsonResult Delete(int id) {
122. var tmp = dataContext.Students.FirstOrDefault(s => s.Id == id);
123. if (tmp != null)
124.             {
125.                 dataContext.Students.Remove(tmp);
126. int num = dataContext.SaveChanges();
127. if (num > 0)
128.                 {
129. return Json("Success");
130.                 }
131. else
132.                 {
133. return Json("Failure");
134.                 }
135.             }
136. return Json("Error");
137.         }
138.     }
139. }

创建视图

视图主要分为新增,查询,修改三个视图,如下所示:

1. 查询视图

1. @{
2.     Layout = null;
3. }
4. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
5. <html xmlns="http://www.w3.org/1999/xhtml">
6. <head>
7. <link rel="stylesheet" type="text/css" href="/css/reset.css" media="screen" />
8. <link rel="stylesheet" type="text/css" href="/css/text.css" media="screen" />
9. <link rel="stylesheet" type="text/css" href="/css/grid.css" media="screen" />
10. <link rel="stylesheet" type="text/css" href="/css/layout.css" media="screen" />
11. <link rel="stylesheet" type="text/css" href="/css/nav.css" media="screen" />
12. <!--[if IE 6]><link rel="stylesheet" type="text/css" href="css/ie6.css" media="screen" /><![endif]-->
13. <!--[if IE 7]><link rel="stylesheet" type="text/css" href="css/ie.css" media="screen" /><![endif]-->
14. <link href="/css/table/demo_page.css" rel="stylesheet" type="text/css" />
15. <!-- BEGIN: load jquery -->
16. <script src="js/jquery-1.6.4.min.js" type="text/javascript"></script>
17. <script type="text/javascript" src="js/jquery-ui/jquery.ui.core.min.js"></script>
18. <script src="js/jquery-ui/jquery.ui.widget.min.js" type="text/javascript"></script>
19. <script src="js/jquery-ui/jquery.ui.accordion.min.js" type="text/javascript"></script>
20. <script src="js/jquery-ui/jquery.effects.core.min.js" type="text/javascript"></script>
21. <script src="js/jquery-ui/jquery.effects.slide.min.js" type="text/javascript"></script>
22. <script src="js/jquery-ui/jquery.ui.mouse.min.js" type="text/javascript"></script>
23. <script src="js/jquery-ui/jquery.ui.sortable.min.js" type="text/javascript"></script>
24. <script src="js/table/jquery.dataTables.min.js" type="text/javascript"></script>
25. <!-- END: load jquery -->
26. <script type="text/javascript" src="js/table/table.js"></script>
27. <script src="js/setup.js" type="text/javascript"></script>
28. <script type="text/javascript">
29. var timer; //监听器
30. var winopen;  //B页面的打开事件
31. //判断子窗口是否关闭,关闭刷新页面
32. function IfWindowClosed() {
33. //判断B页面打开事件
34. if (winopen.closed == true) {
35. //执行A页面的相关方法操作
36. query();
37. //关闭监听器
38. window.clearInterval(timer);
39.             }
40.         }
41.         $(document).ready(function () {
42. query();
43. //查询按钮绑定事件
44.             $("#btnQuery").click(function () {
45. query();
46.             });
47.             $("#btnAdd").click(function () {
48. var url = "Student/Add";
49.                 winopen = window.open(url, '_target', "width=400,height=450,left=400,top=300");
50. //打开监听器
51.                 timer = window.setInterval("IfWindowClosed()", 500);
52.             });
53.             $("#btnEdit").click(function () {
54. var id = $("input[name='sckb']:checked").val();
55. var url = "Student/Edit/" + id;
56.                 winopen = window.open(url, '_target', "width=400,height=450,left=400,top=300");
57. //打开监听器
58.                 timer = window.setInterval("IfWindowClosed()", 500);
59.             });
60.             $("#btnDelete").click(function () {
61. var id = $("input[name='sckb']:checked").val();
62. if (id == null || id == "") {
63. alert("没有选择需要删除的项");
64.                 } else {
65. if (confirm("确定要删除吗?")) {
66. var url = "/Student/Delete/"+id;
67. 
68.                         $.post(
69.                             url,
70.                             {
71. 
72.                             },
73. function (data, status) {
74. //debugger;
75. if (status == "success") {
76. if (data == "Success") {
77. query();
78. alert("删除成功");
79.                                     } else {
80. window.alert(data);
81.                                     }
82.                                 } else {
83. window.alert("访问异常");
84.                                 }
85. console.log("数据: \n" + data + "\n状态: " + status);
86.                             }
87.                         );
88.                     }
89.                 }
90.             });
91.         });
92. function query() {
93. var url = "/Student/Query";
94.             $.post(
95.                 url,
96.                 {
97. Name: $("#Name").val()
98.                 },
99. function (data, status) {
100. //debugger;
101. console.log("数据: \n" + data + "\n状态: " + status);
102.                     $("#student tbody").empty();
103. //初始化Table
104.                     $.each(data, function (n, item) {
105. var rowstyle = "odd gradeA";
106. if (n % 2 == 0) {
107.                             rowstyle = "even gradeA";
108.                         }
109. var row = "<tr class=\"" + rowstyle + "\"><td><input type='checkbox' name=\"sckb\" id='sckb" + item.id + "' value='" + item.id + "' onclick='javascript:chkClick(event)' /></td><td>" + item.no + "</td><td>" + item.name + "</td><td>" + item.age + "</td><td>" + (item.sex==true?"男":"女") + "</td><td>" + item.dept + "</td><td>大" + item.grade + "</td><td>" + item.class + "班</td></tr>";
110.                         $("#student tbody").append(row);
111.                     });
112.                 }
113.             );
114.             $('.datatable').dataTable();
115.         }
116. 
117. function chkClick(e) {
118. 
119. if ($(e.target).prop("checked")) {
120. var id = $(e.target).val();
121.                 $(e.target).parent().parent().css("background", "lightblue");
122.                 $("input[name='sckb']").each(function (index, item) {//
123. debugger;
124. if ($(item).val() != id) {
125.                         $(item).prop("checked", false);
126.                         $(item).parent().parent().css("background", "none");
127.                     }
128.                 });
129.             }
130.         }
131. </script>
132. </head>
133. <body>
134. <div class="container_12">
135. <div class="grid_10">
136. <div class="box round first grid">
137. <h2>学生信息查询</h2>
138. <div>
139. <span>姓名</span><input type="text" id="Name" name="Name" />
140. <button class="btn btn-blue" id="btnQuery"><span></span>Query</button>
141. <button class="btn btn-blue" id="btnAdd"><span></span>Add</button>
142. <button class="btn btn-blue" id="btnEdit"><span></span>Edit</button>
143. <button class="btn btn-blue" id="btnDelete"><span></span>Delete</button>
144. </div>
145. <div class="block">
146. <table class="data display datatable" id="student">
147. <thead>
148. <tr>
149. <th>选择</th>
150. <th>学号</th>
151. <th>姓名</th>
152. <th>年龄</th>
153. <th>性别</th>
154. <th>专业</th>
155. <th>年级</th>
156. <th>班级</th>
157. </tr>
158. </thead>
159. <tbody>
160. 
161. </tbody>
162. </table>
163. </div>
164. </div>
165. </div>
166. </div>
167. </body>
168. </html>

2. 新增视图

新增视图,主要用于创建学生信息,如下所示:

1. @{
2.     Layout = null;
3. }
4. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
5. <html xmlns="http://www.w3.org/1999/xhtml">
6. <head>
7. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
8. <title>学生信息管理系统</title>
9. <link rel="stylesheet" type="text/css" href="/css/reset.css" media="screen" />
10. <link rel="stylesheet" type="text/css" href="/css/text.css" media="screen" />
11. <link rel="stylesheet" type="text/css" href="/css/grid.css" media="screen" />
12. <link rel="stylesheet" type="text/css" href="/css/layout.css" media="screen" />
13. <link rel="stylesheet" type="text/css" href="/css/nav.css" media="screen" />
14. <!--[if IE 6]><link rel="stylesheet" type="text/css" href="css/ie6.css" media="screen" /><![endif]-->
15. <!--[if IE 7]><link rel="stylesheet" type="text/css" href="css/ie.css" media="screen" /><![endif]-->
16. <link href="/css/fancy-button/fancy-button.css" rel="stylesheet" type="text/css" />
17. <!--Jquery UI CSS-->
18. <link href="/css/themes/base/jquery.ui.all.css" rel="stylesheet" type="text/css" />
19. <!-- BEGIN: load jquery -->
20. <script src="/js/jquery-1.6.4.min.js" type="text/javascript"></script>
21. <script type="text/javascript" src="/js/jquery-ui/jquery.ui.core.min.js"></script>
22. <script src="/js/jquery-ui/jquery.ui.widget.min.js" type="text/javascript"></script>
23. <script src="/js/jquery-ui/jquery.ui.accordion.min.js" type="text/javascript"></script>
24. <script src="/js/jquery-ui/jquery.effects.core.min.js" type="text/javascript"></script>
25. <script src="/js/jquery-ui/jquery.effects.slide.min.js" type="text/javascript"></script>
26. <!-- END: load jquery -->
27. <!--jQuery Date Picker-->
28. <script src="/js/jquery-ui/jquery.ui.widget.min.js" type="text/javascript"></script>
29. <script src="/js/jquery-ui/jquery.ui.datepicker.min.js" type="text/javascript"></script>
30. <script src="/js/jquery-ui/jquery.ui.progressbar.min.js" type="text/javascript"></script>
31. <!-- jQuery dialog related-->
32. <script src="/js/jquery-ui/external/jquery.bgiframe-2.1.2.js" type="text/javascript"></script>
33. <script src="/js/jquery-ui/jquery.ui.mouse.min.js" type="text/javascript"></script>
34. <script src="/js/jquery-ui/jquery.ui.draggable.min.js" type="text/javascript"></script>
35. <script src="/js/jquery-ui/jquery.ui.position.min.js" type="text/javascript"></script>
36. <script src="/js/jquery-ui/jquery.ui.resizable.min.js" type="text/javascript"></script>
37. <script src="/js/jquery-ui/jquery.ui.dialog.min.js" type="text/javascript"></script>
38. <script src="/js/jquery-ui/jquery.effects.core.min.js" type="text/javascript"></script>
39. <script src="/js/jquery-ui/jquery.effects.blind.min.js" type="text/javascript"></script>
40. <script src="/js/jquery-ui/jquery.effects.explode.min.js" type="text/javascript"></script>
41. <!-- jQuery dialog end here-->
42. <script src="/js/jquery-ui/jquery.ui.accordion.min.js" type="text/javascript"></script>
43. <!--Fancy Button-->
44. <script src="/js/fancy-button/fancy-button.js" type="text/javascript"></script>
45. <script src="/js/setup.js" type="text/javascript"></script>
46. <script type="text/javascript">
47. 
48.         $(document).ready(function () {
49. //$('input[type="radio"]').fancybutton();
50.             $("#btnSave").click(function () {
51. save();
52.             });
53.         });
54. function save() {
55. var url = "/Student/Save";
56. //alert($("input[name = 'Sex']:checked").val());
57. var sex =Boolean(parseInt($("input[name = 'Sex']:checked").val()));
58. //debugger;
59.             $.post(
60.                 url,
61.                 {
62. No:$("#No").val(),
63. Name: $("#Name").val(),
64. Age: $("#Age").val(),
65. Sex: sex,
66. Dept: $("#Dept").val(),
67. Grade: $("#Grade").val(),
68. Class: $("#Class").val(),
69.                 },
70. function (data, status) {
71. //debugger;
72. if (status == "success") {
73. if (data == "Success") {
74. window.close();
75.                         } else {
76. window.alert(data);
77.                         }
78.                     } else {
79. window.alert("访问异常");
80.                     }
81. console.log("数据: \n" + data + "\n状态: " + status);
82.                 }
83.             );
84.         }
85. </script>
86. </head>
87. <body>
88. <div class="container_12">
89. <div class="grid_12">
90. <div class="box round first fullpage">
91. <h2>新增学生信息</h2>
92. <div class="block ">
93. <table class="form">
94. <tr>
95. <td class="col1">
96. <label>学号</label>
97. </td>
98. <td class="col2">
99. <input type="text" id="No" name="No" />
100. </td>
101. </tr>
102. <tr>
103. <td class="col1">
104. <label>姓名</label>
105. </td>
106. <td class="col2">
107. <input type="text" id="Name" name="Name" />
108. </td>
109. </tr>
110. <tr>
111. 
112. <td class="col1">
113. <label>年龄</label>
114. </td>
115. <td class="col2">
116. <input type="text" id="Age" name="Age" />
117. </td>
118. </tr>
119. <tr>
120. <td>
121. <label>性别</label>
122. </td>
123. <td>
124. <input type="radio" name="Sex" id="Male" value="1" />男
125. <input type="radio" name="Sex" id="Female" value="0" />女
126. </td>
127. </tr>
128. <tr>
129. 
130. <td class="col1">
131. <label>专业</label>
132. </td>
133. <td class="col2">
134. <input type="text" id="Dept" name="Dept" />
135. </td>
136. </tr>
137. <tr>
138. <td>
139. <label>年级</label>
140. </td>
141. <td>
142. <select id="Grade" name="Grade">
143. <option value="一">一年级</option>
144. <option value="二">二年级</option>
145. <option value="三">三年级</option>
146. <option value="四">四年级</option>
147. </select>
148. </td>
149. </tr>
150. <tr>
151. <td>
152. <label>班级</label>
153. </td>
154. <td>
155. <select id="Class" name="Class">
156. <option value="一">一班</option>
157. <option value="二">二班</option>
158. <option value="三">三班</option>
159. <option value="四">四班</option>
160. <option value="五">五班</option>
161. <option value="六">六班</option>
162. </select>
163. </td>
164. </tr>
165. <tr>
166. <td colspan="2">
167. <button class="btn btn-blue" id="btnSave">Save</button>
168. <button class="btn btn-grey" type="reset" name="Reset" id="Reset">Reset</button>
169. </td>
170. </tr>
171. </table>
172. </div>
173. </div>
174. </div>
175. </div>
176. </body>
177. </html>

3. 编辑视图

编辑视图,主要用于修改学生信息,与新增视图相像,存在略微不同,如下所示:

1. @{
2.     Layout = null;
3. }
4. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
5. <html xmlns="http://www.w3.org/1999/xhtml">
6. <head>
7. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
8. <title>学生信息管理系统</title>
9. <link rel="stylesheet" type="text/css" href="/css/reset.css" media="screen" />
10. <link rel="stylesheet" type="text/css" href="/css/text.css" media="screen" />
11. <link rel="stylesheet" type="text/css" href="/css/grid.css" media="screen" />
12. <link rel="stylesheet" type="text/css" href="/css/layout.css" media="screen" />
13. <link rel="stylesheet" type="text/css" href="/css/nav.css" media="screen" />
14. <!--[if IE 6]><link rel="stylesheet" type="text/css" href="css/ie6.css" media="screen" /><![endif]-->
15. <!--[if IE 7]><link rel="stylesheet" type="text/css" href="css/ie.css" media="screen" /><![endif]-->
16. <link href="/css/fancy-button/fancy-button.css" rel="stylesheet" type="text/css" />
17. <!--Jquery UI CSS-->
18. <link href="/css/themes/base/jquery.ui.all.css" rel="stylesheet" type="text/css" />
19. <!-- BEGIN: load jquery -->
20. <script src="/js/jquery-1.6.4.min.js" type="text/javascript"></script>
21. <script type="text/javascript" src="/js/jquery-ui/jquery.ui.core.min.js"></script>
22. <script src="/js/jquery-ui/jquery.ui.widget.min.js" type="text/javascript"></script>
23. <script src="/js/jquery-ui/jquery.ui.accordion.min.js" type="text/javascript"></script>
24. <script src="/js/jquery-ui/jquery.effects.core.min.js" type="text/javascript"></script>
25. <script src="/js/jquery-ui/jquery.effects.slide.min.js" type="text/javascript"></script>
26. <!-- END: load jquery -->
27. <!--jQuery Date Picker-->
28. <script src="/js/jquery-ui/jquery.ui.widget.min.js" type="text/javascript"></script>
29. <script src="/js/jquery-ui/jquery.ui.datepicker.min.js" type="text/javascript"></script>
30. <script src="/js/jquery-ui/jquery.ui.progressbar.min.js" type="text/javascript"></script>
31. <!-- jQuery dialog related-->
32. <script src="/js/jquery-ui/external/jquery.bgiframe-2.1.2.js" type="text/javascript"></script>
33. <script src="js/jquery-ui/jquery.ui.mouse.min.js" type="text/javascript"></script>
34. <script src="/js/jquery-ui/jquery.ui.draggable.min.js" type="text/javascript"></script>
35. <script src="/js/jquery-ui/jquery.ui.position.min.js" type="text/javascript"></script>
36. <script src="/js/jquery-ui/jquery.ui.resizable.min.js" type="text/javascript"></script>
37. <script src="/js/jquery-ui/jquery.ui.dialog.min.js" type="text/javascript"></script>
38. <script src="/js/jquery-ui/jquery.effects.core.min.js" type="text/javascript"></script>
39. <script src="/js/jquery-ui/jquery.effects.blind.min.js" type="text/javascript"></script>
40. <script src="/js/jquery-ui/jquery.effects.explode.min.js" type="text/javascript"></script>
41. <!-- jQuery dialog end here-->
42. <script src="/js/jquery-ui/jquery.ui.accordion.min.js" type="text/javascript"></script>
43. <!--Fancy Button-->
44. <script src="/js/fancy-button/fancy-button.js" type="text/javascript"></script>
45. <script src="/js/setup.js" type="text/javascript"></script>
46. <script type="text/javascript">
47. 
48.         $(document).ready(function () {
49. //$('input[type="radio"]').fancybutton();
50.             $("#btnSave").click(function () {
51. save();
52.             });
53.         });
54. function save() {
55. var url = "/Student/Save2";
56. var sex = Boolean(parseInt($("input[name = 'Sex']:checked").val()));
57.             $.post(
58.                 url,
59.                 {
60. Id: $("#Id").val(),
61. No:$("#No").val(),
62. Name: $("#Name").val(),
63. Age: $("#Age").val(),
64. Sex: sex,
65. Dept: $("#Dept").val(),
66. Grade: $("#Grade").val(),
67. Class: $("#Class").val(),
68.                 },
69. function (data, status) {
70. //debugger;
71. if (status == "success") {
72. if (data == "Success") {
73. window.close();
74.                         } else {
75. window.alert(data);
76.                         }
77.                     } else {
78. window.alert("访问异常");
79.                     }
80. console.log("数据: \n" + data + "\n状态: " + status);
81.                 }
82.             );
83.         }
84. </script>
85. </head>
86. <body>
87. <div class="container_12">
88. <div class="grid_12">
89. <div class="box round first fullpage">
90. <h2>编辑学生信息</h2>
91. <div class="block ">
92. 
93. <input type="hidden" name="Id" id="Id" value="@Model.Id" />
94. <table class="form">
95. <tr>
96. <td class="col1">
97. <label>学号</label>
98. </td>
99. <td class="col2">
100. <input type="text" id="No" name="No" value="@Model.No" />
101. </td>
102. </tr>
103. <tr>
104. <td class="col1">
105. <label>姓名</label>
106. </td>
107. <td class="col2">
108. <input type="text" id="Name" name="Name" value="@Model.Name" />
109. </td>
110. </tr>
111. <tr>
112. 
113. <td class="col1">
114. <label>年龄</label>
115. </td>
116. <td class="col2">
117. <input type="text" id="Age" name="Age" value="@Model.Age" />
118. </td>
119. </tr>
120. <tr>
121. <td>
122. <label>性别</label>
123. </td>
124. <td>
125. <input type="radio" name="Sex" id="Male" value="1" @(Model.Sex?"checked":"") />男
126. <input type="radio" name="Sex" id="Female" value="0" @(Model.Sex?"":"checked") />女
127. </td>
128. </tr>
129. <tr>
130. 
131. <td class="col1">
132. <label>专业</label>
133. </td>
134. <td class="col2">
135. <input type="text" id="Dept" name="Dept" value="@Model.Dept"  />
136. </td>
137. </tr>
138. <tr>
139. <td>
140. <label>年级</label>
141. </td>
142. <td>
143. <select id="Grade" name="Grade">
144.                                     @{ var grades = new string[4] { "一", "二", "三", "四" };
145.                                         foreach (var grade in grades)
146.                                         {
147.                                             if (Model.Grade.Equals(grade))
148.                                             {
149. <option value="@grade" selected><span>@grade</span>年级</option>
150.                                             }
151.                                             else
152.                                             {
153. <option value="@grade"><span>@grade</span>年级</option>
154.                                             }
155. 
156.                                         }
157.                                     }
158. </select>
159. </td>
160. </tr>
161. <tr>
162. <td>
163. <label>班级</label>
164. </td>
165. <td>
166. <select id="Class" name="Class">
167.                                     @{ var Classes = new string[6] { "一", "二", "三", "四","五","六" };
168.                                         foreach (var Class in Classes)
169.                                         {
170.                                             if (Model.Class.Equals(Class))
171.                                             {
172. <option value="@Class" selected=selected><span>@Class</span>班</option>
173.                                             }
174.                                             else
175.                                             {
176. <option value="@Class"><span>@Class</span>班</option>
177.                                             }
178. 
179.                                         }
180.                                     }
181. </select>
182. </td>
183. </tr>
184. <tr>
185. <td colspan="2">
186. <button class="btn btn-blue" id="btnSave">Save</button>
187. <button class="btn btn-grey" name="Reset" id="Reset">Reset</button>
188. </td>
189. </tr>
190. </table>
191. 
192. </div>
193. </div>
194. </div>
195. </div>
196. </body>
197. </html>

数据库集成上下文DataContext

在DataContext中,增加学生模型的集合,如下所示:

1. namespace SMS.Models
2. {
3. public class DataContext:DbContext
4.     {
5. public DbSet<User> Users { get; set; }
6. 
7. public DbSet<Menu> Menus { get; set; }
8. 
9. public DbSet<Role> Roles { get; set; }
10. 
11. public DbSet<UserRole> UserRoles { get; set; }
12. 
13. public DbSet<RoleMenu> RoleMenus { get; set; }
14. 
15. /// <summary>
16. /// 学生
17. /// </summary>
18. public DbSet<Student> Students { get; set; }
19. 
20. public DataContext(DbContextOptions options) : base(options)
21.         {
22. 
23.         }
24.     }
25. }

构建数据

数据库创建对应学生表,如下所示:

项目目录

关于项目的总体目录,如下所示:

运行测试

在Visual Studio中运行示例代码,如下所示:

至此,学生信息系统系列文章已经完成,其他功能模块与学生信息管理大同小异,都是对数据的增删改查操作,不再单独赘述。本文旨在抛砖引玉,共同学习,一起进步。关于示例源码,可点击下载

关于JS中的Boolean

在本示例中,使用Javascript中的Boolean函数,关于Boolean函数,描述如下:

注意:本示例中,性别的取法和转换。引用源码时,请注意。

备注

元日【作者】王安石 【朝代】宋

爆竹声中一岁除,春风送暖入屠苏。

千门万户曈曈日,总把新桃换旧符。

相关文章
|
5天前
|
存储 JSON 算法
net core jwt的基本原理和实现
这篇文章介绍了.NET Core中JWT(JSON Web Token)的基本原理和实现。JWT是一种用于安全传输信息的开放标准,由头部、负载和签名三部分组成。在.NET Core中实现JWT,需要安装`Microsoft.AspNetCore.Authentication.JwtBearer`包,然后在`Startup.cs`配置JWT认证服务,包括设置密钥和验证参数。生成JWT令牌后,客户端存储并将其包含在请求头中发送给服务器进行验证和授权。JWT提供了一种无需服务器存储会话数据的安全身份验证和授权机制。
|
6天前
|
开发框架 .NET C#
使用C#进行.NET框架开发:深入探索与实战
【5月更文挑战第28天】本文探讨了C#在.NET框架中的应用,展示了其作为强大编程语言的特性,如类型安全、面向对象编程。C#与.NET框架的结合,提供了一站式的开发环境,支持跨平台应用。文中介绍了C#的基础知识,如数据类型、控制结构和面向对象编程,以及.NET的关键技术,包括LINQ、ASP.NET和WPF。通过一个实战案例,展示了如何使用C#和ASP.NET开发Web应用,包括项目创建、数据库设计、模型和控制器编写,以及视图和路由配置。本文旨在揭示C#在.NET开发中的深度和广度,激发开发者探索更多可能性。
|
19天前
|
人工智能 量子技术 C#
【专栏】.NET 开发:开启数字化新时代
【4月更文挑战第29天】.NET开发在数字化新时代中发挥关键作用,借助跨平台能力、高性能和现代编程语言支持,如C#,助力企业实现数字化转型。通过企业级应用开发、移动应用和云计算集成,.NET加速业务流程和提升用户体验。未来,.NET将涉足AI、ML、MR/AR及量子计算,持续推动技术创新和数字化转型。开发者应提升技能,适应高性能需求,把握发展机遇。
|
19天前
|
缓存 监控 算法
【专栏】.NET 开发:实现卓越性能的途径
【4月更文挑战第29天】本文探讨了.NET开发中的性能优化,强调了理解性能问题根源和使用分析工具的重要性。基础优化包括代码优化(如减少计算、避免内存泄漏)、资源管理及选择合适算法。高级策略涉及并行编程、缓存策略、预编译(AOT)和微服务架构。持续性能测试与监控是关键,包括性能测试、监控分析和建立优化反馈循环。开发者应持续学习和实践性能优化,以构建高性能应用。
|
19天前
|
开发框架 .NET C#
【专栏】理解.NET 技术,提升开发水平
【4月更文挑战第29天】本文介绍了.NET技术的核心概念和应用,包括其跨平台能力、性能优化、现代编程语言支持及Web开发等特性。文章强调了深入学习.NET技术、关注社区动态、实践经验及学习现代编程理念对提升开发水平的重要性。通过这些,开发者能更好地利用.NET构建高效、可维护的多平台应用。
|
19天前
|
机器学习/深度学习 vr&ar 开发者
【专栏】.NET 技术:引领开发新方向
【4月更文挑战第29天】本文探讨了.NET技术如何引领软件开发新方向,主要体现在三方面:1) 作为跨平台开发的先锋,.NET Core支持多操作系统和移动设备,借助.NET MAUI创建统一UI,适应物联网需求;2) 提升性能和开发者生产力,采用先进技术和优化策略,同时更新C#语言特性,提高代码效率和可维护性;3) 支持现代化应用架构,包括微服务、容器化,集成Kubernetes和ASP.NET Core,保障安全性。此外,.NET还不断探索AI、ML和AR/VR技术,为软件开发带来更多创新可能。
|
19天前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
75 0
|
19天前
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
29 0
|
19天前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界
35 0
|
19天前
|
开发框架 前端开发 .NET
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
128 5