首页 > 代码库 > ASP.NET MVC5高级编程 之 表单

ASP.NET MVC5高级编程 之 表单

1.1 action和method特性

表单是包含输入元素的容器,其中包含按钮、复选框、文本框等元素。表单中的这些输入元素使得用户能够向页面中输入信息,并把输入的信息提交给服务器。数据的提交依赖于action和method

action特性用以告知Web浏览器信息发送到哪里,所以action包含一个URL。这里的URL可以是相对的,也可以使绝对的。

1 <form action="http://www.bing.com/search">
2    <input name="q"  type="text" />
3    <input type="submit" value=http://www.mamicode.com/"Search!">
4 </form>

上面的代码中不包含method特性。发送信息时,默认是“get”,所以上面的代码等同于:

1 <form action="http://www.bing.com/search" method="get">
2    <input name="q"  type="text" />
3    <input type="submit" value=http://www.mamicode.com/"Search!">
4 </form>

当用户使用HTTP GET请求提交表单时,浏览器会提取表单中输入元素的name特性值及其相应的value特性值,并将他们放入查询字符串中。换句话说,上面的表单将把浏览器导航到URL(假设用户正在搜索关键词love):http://www.bing.com/search?q=love

 

1.2 GET方法还是POST方法

如果不想让浏览器把输入值放入查询字符串中,而是想放入HTTP请求的主体,就可以给method特性值赋值post。尽管这样也可以成功的向搜索引擎发送POST请求并能看到响应的结果,但是相对而言,使用HTTP GET请求会更好一些。

  • GET请求的所有参数都在URL中,因此可以为GET请求建立书签。可以在电子邮件或网页中将这些URL作为超链接来使用,除此之外,还可以保留所有的表单输入值。
  • 更重要的是,因为GET方法代表的是幂等操作和只读操作,所以它是做这些工作的最好选择。Get不会(或不应该)改变服务器上的状态,所以客户端可以向服务器重复地发送GET请求而不会产生负面影响。
  • POST请求可以用来提交信用卡交易信息、向购物车中添加或者修改密码等。POST请求通常情况下会改变服务器上的状态,重复提交POST请求可能会产生不良后果。

通常情况下,GET请求用于读操作,POST请求用于写操作(通常包括更新、创建和删除)

(1)用搜索表单搜索音乐

HTML:

1 <form action="/Home/Search" method="get">
2    <input type="text" name="q" />
3    <input type="submit" value="Search">
4 </form>

在HomeController控制器中实现Search方法。

1 public ActionResult Search(string q)
2 {
3   var albums = storeDB.Albums
4                        .Include("Artist")
5                        .Where(a => a.Title.Contains(q))
6                        .Take(10);
7    return View(albums);
8 }

(2)通过计算action特性值来搜索音乐

更好的办法是通过计算action特性的值来搜索音乐。有一个HTML辅助方法可以代劳自动完成这个计算,如下所示:

1  @using ( Html.BeginForm("Search" , "Home" ,FormMethod.Get)) {
2     <input type="text" name="q" />
3     <input type="submit" value="Search">
4    }

BeginForm HTML辅助方法利用路由引擎找到HomeController控制器的Search操作。它在后台使用GetVirtualPath方法,该方法在RouteTable的Routes属性中——在global.aspx中,Web应用程序注册所有路由的位置。

 

ASP.NET MVC5高级编程 之 表单