hello

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页面用于展示查询到的信息,代码略。

运行效果图如下:

clip_image002

clip_image001

我们可以看到form的参数是直接显示到url后面的。

而如果使用post方法,如:

<form action="/Home/Search" method="post">

Album's Name: <input  type="text" name="query"/>
<br />
<input  type="submit" value="Seach"/>
</form>

运行效果图:

clip_image001[4]

这里form表单数据是没有体现在url参数上面的。而此时我们刷新页面,会看到:

clip_image002

如果是向数据库里提交数据,刷新页面极有可能就同时提交了两次相同的数据了。

posted @ 2013-01-13 11:00  B追风少年  阅读(3089)  评论(0编辑  收藏  举报

hello too