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參數上面的。而此時我們刷新頁面,會看到:
如果是向數據庫里提交數據,刷新頁面極有可能就同時提交了兩次相同的數據了。