今天我们要来搞懂昨天用 Scaffold 建立出来的 CRUD 到底在做些什麽事
但在看程序码前我们需要先搞懂两个观念
Entity Framework Core
HttpGet 和 HttpPost
Entity Framework Core 是微软新一代的物件关联对应 (ORM) 框架,以 .NET Core 实作,不过它是归属於 ASP.NET Core 专案的一部份,在 ASP.NET Core 开始开发时就被列入标准功能,与现行的 Entity Framework 一样,是微软官方建议使用的资料存取功能。
EF Core 主要用於在资料库与物件对应处理,让使用者可以用程序语言操作资料库的框架,当程序要求存取资料库的时候就会启用他来把资料库表格和 Model 对应
,下面是新增资料的做法,会用到 DbContext
操作,语法相当简单:
_context.Add(product1); //新增物品1
_context.Add(product2); //新增物品2
_context.SaveChanges(); //储存更新
保存机制 EF Core 都已经处理得很好了,如果 product1 成功但 product2 失败的话 EF Core 会把两个动作都 ROLLBACK 保证资料完整性。
这两个都是在HTTP协定中定义的方法,是用户端和服务器端处理传值的方法
在实务上两者都能达到传值的效果但在本质上有所不同:
以寄信来比喻
基於这样的特性,我们通常会把GET拿来做查询资料
这种安全性需求较低的操作,
POST则是拿来做安全性需求高的表单新增修改
之类的动作,以防止别人直接从网址攻击。
掌握了上面的观念,就来以 Create 为例,来看看 MVC 怎麽处理新增商品这个行为吧!
打开控制器 ProductsController.cs
就会发现有两个 Create()
,建置出来的注解上有标示这分别为 GET 和 POST 的动作
再来回想一下这张流程图,配合这张图来走一次
GET:
public IActionResult Create()
{
return View();
}
第 1 步:使用者用/Products/Create
网址访问程序
第 2 步:控制器进到这里判断不需用到 Model 查询资料,即跳过第 3 4 步
第 5 步第 6 步:把空白页面传给使用者填资料
完成了显示画面的 MVC 流程
接着当使用者把表单填好点选送出以後就进行POST
POST:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("Id,Name,Price")] Product product)
{
if (ModelState.IsValid)
{
_context.Add(product);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(product);
}
第 1 步:把表单用 POST 传给控制器
第 2 步:控制器判断要把表单内容绑定给商品模型
第 3 步第 4 步:模型透过 EF Core
把商品新增到资料库
第 5 步第 6 步:控制器回传 Index 页面给使用者
完成写入资料库的 MVC 流程
由上面的例子可以看到对於使用者来说,就不过是在页面上按下一个按钮罢了, MVC 代表的只是资料的流动处理,千万不用把它想的太难,其他的List
、Detail
、Update
、Delete
都可以以此类推,再自己试试看。
MVC 大概讲到这边,明天就准备开始来建立我们的购物网站吧!
一般阅读的文章是由标题和段落文字组成,如果是长篇内容,容易让读者感到沉闷。这时候你可以试试适当加入...
我们来看到最大公因数(GCD)及最小公倍数(LCM)啦! 最大公因数顾名思义就是两数或多个数间共同有...
keil编译时发生一连串#101 error问题 出问题程序码范例 #include <std...
上一篇讲到SPA的缺点,Vue是用JvaScript载入後台的数据,并且动态产生元件,SEO只能抓取...
在Wentz Wu网站上说明,CIA是美国法定目标(PUBLIC LAW 107–347—DEC. ...