form是什么?
<form>标签是HTML里最重要的标签之一,是我们最常用的标签之一。但是,我想说,在很多初级.net程序员脑海里,他就是一个承载控件的母体,至于他的作用是什么可能都不清楚。form是一个表单,用来向服务器post数据。传统的web开发(没有控件概念的开发),form标签的写法是<form id="form1" action="" method="post">...</form>(可以看asp.net生成的html源代码)。
Id我们知道,那Action是什么?Method是什么呢?
get和post
Action是form要提交到哪个地址(请求发送到哪个页),Method是提交(页面请求)的方式(get or post)。“提交”其实也是页面请求,只是有的会发送数据,有的不会。
ASP.NET生成的html代码你会看到action是自己?这是什么意思?
实际上是当用户点击提交按钮后,又再一次请求自己这个的页面,并且处理了提交数据,具体的处理过程我会在后面的章节中一一道来。
我们知道,http协议里有Get和Post两种请求(另外还有put和delete,这里不讨论)。顾名思义,get是“获取”,post是“发送”——即向服务器提交数据。服务器通过Action指定的页面来处理post过来的数据(Request.Form["InputName"]获取具体控件值)。
这样又有新问题,form的method可以设置为get吗?他们有什么区别?
method是可以设置为get的。但是get访问URL的方式并不是向服务器发送数据,只负责获取。
所以如果我们要把表单的数据向服务端发送,只能把数据放在网址里的参数里,服务端可以通过Request.QueryString["InputName"]来得到控件的值。
但是,url的长度毕竟有限,而且是明文,所以get的方式不能提交大数据和隐私数据。而post显然没这个限制,适合大量数据提交。
submit
submit即是“提交”的意思。
但是为什么ASP.NET里却没有submit控件呢?只有<asp:button/>。实际上查看网页源代码就可以发现WebForm已经帮我们“做”了一个提交按钮,只是我们跟他不熟。
提交按钮的标签是<input type="submit"/>,但ASP.NET的button生成的则是<input type="button">。button是不能触发表单提交的,只有通过submit才能触发form的提交。
注意我加了个新的词汇,form的提交! 是的,form是什么? 怎么又变成它的提交了,不是按钮吗?
在浏览器里,所有的html节点和js变量都是window的prototype(参照Javascript权威指南第五版的说法)。
form1(form的id)这个form是一个dom实例。他有自己的成员、事件、方法(详细请看http://www.w3school.com.cn/htmldom/dom_obj_form.asp),其中有个方法就是submit()!
ASP.NET虽然没有用submit,但他用javascript写了一个小方法来调用form的submit方法一样可以实现表单的提交。
所以我们在平时开发网页时,也可以实现自己来调用form的submit,当然,我们可以在提交之前做一些处理(比如验证填写情况)。
代码实例:
<html>
<head>
<script type="text/javascript">
function formSubmit()
{
document.getElementById("myForm").submit()
}
</script>
</head>
<body>
<form id="myForm" action="js_form_action.asp" method="get">
Firstname: <input type="text" name="firstname" size="20"><br />
Lastname: <input type="text" name="lastname" size="20"><br />
<br />
<input type="button" onclick="formSubmit()" value="Submit">
</form>
</body>
</html>