在Controllers文件夹下创建MajorController控制器类文件。
MajorController代码如下所示:
public class MajorController : Controller
{
public IActionResult Index()
{
return View();
}
}
控制器中默认有一个名为Index的Action(动作),它返回一个同名视图。
在控制器中创建一个名为Add的Action,并返回视图。
代码如下:
public IActionResult Add()
{
return View();
}
在Views文件夹下的Major文件夹下创建名为Add.cshtml的视图。
通过ViewBag.Title可以设置当前页面的标题,代码如下:
@{
ViewBag.Title = "添加专业";
}
赋给ViewBag.Title的值会替换掉**_Layout.cshtml**布局文件中的@ViewBag.Title
。
通过@model Major
可以将Major类设置为视图的模型。
但是仅仅添加@model
指定是不够的,还需要指定Major类所处的命名空间,因此还需要在前面加上@using StuInfoManaSys.Models
。
代码如下:
@using StuInfoManaSys.Models
@model Major
Add视图的作用是将专业的名称提交给控制器,因此可以创建一个表单form,并将请求方式设置为post。
我们可以给通过style="width:320px;"
给它一个320像素点的宽度。
再通过bulma的样式属性class="mx-auto"
让表单居中。
代码如下:
<form method="post" class="mx-auto" style="width:320px;">
</form>
通过<input asp-for="Name" class="input">
可以添加一个name="Name"
的input输入框。
通过bulma可以美化样式。
最终代码如下:
<div class="field">
<label class="label">专业名称</label>
<div class="control">
<input asp-for="Name" class="input">
</div>
</div>
通过button标签可以定义一个按钮,同样可以通过bulma美化按钮样式。
代码如下:
<div class="field">
<button class="button is-primary is-fullwidth">提交</button>
</div>
运行项目后,将项目地址设置为**/Major/Add**,可以看到表单最终的效果如下:
在MajorController中再创建一个名为Add的Action,但是这个Add有一个类型为Major的参数用于接收请求的数据。
但是,由于现在有2个名为Add的Action,请求Add地址时,控制器不知道应该触发哪一个Action,因为如果不设置Action的请求类型,它会默认接收所有类型的请求。为了区分,可以通过**[HttpPost]将第二个Action设置为只接收post请求的Action**。
代码如下:
[HttpPost]
public IActionResult Add(Major model)
{
return View();
}
要将接收的数据存入数据库中,还需要调用继承了MajorRepo类基础了BaseRepository基类的Insert方法。
通过构造函数声明,我们可以很轻松地获取一个MajorRepo实例。
代码如下:
public class MajorController(MajorRepo majorRepo) : Controller
{
//其他代码
}
在Add中调用MajorRepo的实例majorRepo的Insert方法,并将model传入其中,便可将数据添加到数据库中。
代码如下:
[HttpPost]
public IActionResult Add(Major model)
{
majorRepo.Insert(model);
return View();
}
将return View();
修改为return RedirectToAction("Index");
,这样会在数据插入成功后重定向到Index动作。
重新运行项目,来到**/Major/Add地址,在专业名称中输入一个专业名称,如软件工程**,点击提交。
提交后,页面会出现异常,这是因为页面重定向到了Index动作,而Index动作返回一个视图,但是我们没有创建这个视图,因此会报错。如果不行看到这个报错,可以提前创建Index视图。
但是在数据库中,可以看到Majors表中会多出一条记录,Name为刚刚提交的名称,Id会自动随机生成。
修改代码后2种使代码生效的方法
1是重新运行项目,也就是按Ctrl+F5,这种方式就是将项目中的代码重新编译后运行
2是热重置,快键键是Alt+F10,图标是浅绿色三角形旁边的红色火团,它只需要编译部分代码就可以更新项目
重新运行速度慢点但是稳妥,热重载速度快但是有时候会出错
可以优先使用热重载,等出错后再试试重新运行项目,可能错误就会消除