MVC3区分Get和Post
1、Get方法是用来向服务器上获取数据,而Post是用来向服务器上传递修改数据。
2、Get将表单里的数据添加到action所指向的URL后面,并且两者之间使用”?”连接,而各个变量之间使用”&”连接;Post是将表单中的数据放在form的数据体中,按照变量和值对象的方式,传递到所指向的action.
3、Get是不安全的,因为在传输过程中,数据被放在请求的Url中,这样,用户可以直接在浏览器上看到提交的数据,一些系统内部信息也一同显示在用户面前。Post的所有操作对用户来说都是不可见的。
4、Get传输的数据量小,主要是受限与于Url长度限制,其中IE浏览器对URL的最大限度为2083个字符(http://hqlong.com/2009/12/1164.html)。 而post可以的传输大量的数据,所以在上传文件和大数据量时使用post。
5、Form提交默认为Get方法提交。
6、Get方式获取数据后,刷新不会有负面的影响,因为它只是获取数据,而Post方法刷洗页面重复提交可能会产生不良的后果。
具体使用如下代码:
Home/Index.cshtml: <form action="/Home/Search" method="get"> Album's Name:êo<input type="text" name="query"/> <br /> <input type="submit" value="Seach"/> </form> Home/Search方法: public ActionResult Search(string query) { //Contains类似like查询 //查询Title==query //var albums = storeDB.Albums.Include(a => a.Artist).Include(a => a.Genre).Single(a => a.Title==query || query == null); //查询Title包含query的集合 //var albums = storeDB.Albums.Include(a => a.Artist).Include(a => a.Genre).Where(a => a.Title.Contains(query) || query == null); //查询Title包含query并且按AlbumId升序排列的前2个的集合 //var albums = storeDB.Albums.Include(a => a.Artist).Include(a => a.Genre).Where(a => a.Title.Contains(query) || query == null).OrderBy(a=>a.AlbumId).Take(2); var albums = storeDB.Albums.Include(a => a.Artist).Include(a => a.Genre).Where(a => a.Title.Contains(query) || query == null).OrderByDescending(a => a.AlbumId).Take(2); return View(albums); }
Home/ Search.cshtml页面用于展示查询到的信息,代码略。
运行效果图如下:
我们可以看到form的参数是直接显示到url后面的。
而如果使用post方法,如:
<form action="/Home/Search" method="post"> Album's Name: <input type="text" name="query"/> <br /> <input type="submit" value="Seach"/> </form>
运行效果图:
这里form表单数据是没有体现在url参数上面的。而此时我们刷新页面,会看到:
如果是向数据库里提交数据,刷新页面极有可能就同时提交了两次相同的数据了。