HTTp GET 请求并呈现视图
HTTp POST 从视图接收HTTP POST请求,检查数据有效性,更新对数据的操作以及重定向到View
Http.Get是在请求数据的时候使用的,也就是说这个Action操作只会读取数据并显示到页面上,而不会对数据进行任何修改。用户可以通过指向这个Action的URL就可以直接访问到数据。对于Http.Get和Http.Post,可以简单的认为,如果这个Action有修改数据的操作则要使用Http.Post,否则就可以使用Http.Get
Post方法是无法直接通过浏览器的URL进行访问的,只有通过特定的网页进行提交才能执行,重定向到所需view,相对get,Post的安全性也稍微高些
//用于接收HTTP GET请求并呈现Edit视图
// GET: /Student/Edit/5
public ActionResult Edit(int id)
{
Models.Student s = new Models.Student();
foreach (Models.Student stu in students)
{
if (stu.Id == id)
{
s.Id = stu.Id;
s.Name = stu.Name;
s.Sex = stu.Sex;
s.Age = stu.Age;
}
}
return View(s);
}
//
// POST: /Student/Edit/5
[HttpPost]
public ActionResult Edit(Models.Student s)
{
if (!ModelState.IsValid)
{
return View("Edit",s);
}
foreach (Models.Student stu in students )
{
if (stu.Id == s.Id)
{
stu.Id = s.Id;
stu.Name = s.Name;
stu.Sex = s.Sex;
stu.Age = s.Age;
}
}
return RedirectToAction("Index");
}
对于return View,MVC框架不会发起一个新的Http请求(这一点有待考证),所以在Http.Get Action中使用。
在Post方法中当数据修改失败需要返回当前页面并显示错误信息的时候也会使用,这样视图表单中数据的数据将会保留,而且View中的ModelState信息等也都会保留。而对于return Redirect,无论是直接Redirect方法还是RedirectToAction方法,都会重新发起一个Http请求并且清楚所有的表单信息和ModelState信息,一般都是在Post方法中修改数据成功后返回列表页面(或者结果页面)的时候使用。比如上面这个Action,注册成功之后将会通过一个新的Http请求执行Home Contrller的Index Action来显示首页。
总结一下,Http.Get Verb用于只读取数据并显示的Action上;Http.Post Verb则用于需要对数据库进行修改的Action上。return View方法不会发起新的Http请求,所以只是用户Get Action中用来返回结果,或者Post Action中返回当前页面并显示错误信息。而return Redirect方法将会重定向到一个URL或者Action上面并且会发起新的Http请求,所以只会用于Post Action中数据修改完毕返回结果页面时。