【ASP.NET 基础】表单和控件

1.HTML表单的提交方式

对于一个普通HTML表单来说,它有两个重要的属性:action 和 method。
action属性指明当前表单提交之后由哪个程序来处理,这个处理程序可以是任何动态网页或者 servlet 或者 CGI(Common Gateway Interface),在asp.net里面一般都是都aspx页面来处理。
method属性指明form表单的提交方式。它有两个可能值get和post。

(1)get方式提交的表单在地址栏会显示参数名和参数值,而post方式不会。用post提交参数相对来说更隐蔽一些,也相对安全一些。假如我们这个页面用于用户登录并且存放用户信息的表为“users”,我们的sql语句可能会这么写:

string sql=” select * from users where username=‘”+username+”’ and password=‘”+password+”’”;

然后我们的 username 和 password 变量从表单提交的数据获取,正常情况下用户填写是没有问题,就上面的例子来说用户填写的用户名和密码分别是“sa”和“123456”,那么我们最后得到的SQL语句是:

sql=”select * from users where username=’sa’ and password=’123456’”

这样是没有问题的。

如果用get方式提交,用户可以对上面的参数进行一些改动,比如在地址栏直接输入:

http://localhost/GetUserInfo.aspx?username=zhoufoxcn&pwd=123‘;delete * from users‘

那么我们得到的SQL就是:

string sql=” select * from users where username=‘zhoufoxcn‘ and password=‘123‘;delete * from users‘”

执行上面的SQL语句就能把Users这个表里的所有数据删除掉!这个一个触目惊心的危险!这个就叫SQL注入。

(2)由于浏览器地址栏能输入的最大字符数有限制,所以用get方式提交不能处理参数值更大的表单,而post方式则没有这个限制。

2.获取表单值

通过用get方式提交表单我们可以看到提交到服务器的时候,在网页后面有“?username=sa&pwd=12345”这么一个字符串,也就是以表单里HTML控件的名字=控件值的方式,并且如果存在多个控件,彼此之间以“&”分割,那么我们就可以以控件名来获取控件值。获取HTML控件值常见有以下集中方式:

 获取方式  表单提交方式
 Request.QueryString["控件名"]   适合于get方式提交的表单
 Request.Form["控件名"]  适合于post方式提交的表单
 Request["控件名"]  同时适合于get和post方式提交的表单

3.乱码问题

对于用户登录的表单,我们在用户名和密码处分别输入“小姑凉”和“123456”,用户就可能会变成“???”,之所以出现这样的情况就是因为我们的编码原因。

所谓乱码,就是用一种编码的字符串却用了另一种编码来显示,造成不能正常显示的现象。
这就像我们在酒吧里对一个懂普通话的服务员说来一杯酒,他马上会送你一杯酒;可是当我们对一个不懂普通话的服务员用普通话说来一杯酒,他就会一头雾水了。
之所以出现乱码就是因为在这里客服端请求的编码和服务器响应的编码不一致

默认情况下 Request 的 ContentEncoding 为 UTF8Encoding ,而 Response 的 ContentEncoding 为 System.Text.DBCSCodePageEncoding ,二者的不一致导致了输入中文成了乱码。

我们常见的编码有 gb2312、gbk 和 unicode 几种,gb2312 能显示日常生活最常用的 6000 多个汉字,这对于一般的公文足够了,可是如果要用来显示一个古文献就不行了(据说康熙词典收录了4万多汉字),当它不能显示的时候也会出现乱码。
Gbk 是在 gb2312 的基础上扩展的,大概能显示1万8千多个汉字,这对于一般古文献也差不多够了。
Unicode 则更大一些,它能显示 20901 个汉字(范围是从/u4e00到/u9fa5),并且还能显示日文、韩文、台湾文字、香港文字和新加坡等文字,所以目前很多网站都采用unicode编码。Utf8编码就是unicode编码中的一种。

<%@ Page Language="C#" ContentType="text/html" ResponseEncoding="gb2312" %>

更改为:

<%@ Page Language="C#" ContentType="text/html" ResponseEncoding="utf-8" %>

这样就能正常显示了。
建网站的时候默认编码就是utf-8,无需更改。

4.服务器端表单

在此之前我们见到的表单都是如下格式:

<form action="接收数据页面" method="post">

并且我们都是利用的HTML控件。现在我们要介绍服务器端表单,服务器端表单与前面的表单相比,多了一个runat=”server”标记,如下:

<form id="form1" runat="server">

在服务器端表单里可以不用指定action属性,表示由当前页面处理,也可以不指定 method 属性,默认为post方式提交表单。在服务器端表单里,我们不光可以使用 HTML 控件,还可以使用 HTML 服务器控件,还可以使用 asp.net 控件 。
另外需要注意的是,在一个 asp.net 页面中可以有多个不带 runat=”server” 标记的表单,但是只能有一个服务器端表单。

5.HTML服务器控件

HTML服务器控件与普通服务器控件不同的是:在普通HTML控件中加上了一个 id 属性和一个 runat=”server” 标记。如下就是一个 HTML 服务器控件:

<input type="text" runat="server" id="txtUserName" />

HTML服务器控件有几个限制:
在整个 asp.net 页面中这个控件 id 的必须唯一,并且 HTML 服务器控件只能放在 HTML 服务器表单中。因为一个 asp.net 页面只能有一个服务器表单,所以说在服务器表单中控件的 id 值必须唯一,因为我们在编程的时候通过这个 id 来访问 HTML 服务器控件。如果不唯一就会报错。

所有的服务器控件经过服务器运行之后都会变成标准的 HTML 控件。
这样我们可以得出一个结论:如果我们的控件功能本来就很简单,我们就可以直接使用HTML控件,这样就可以减轻服务器的负担,提高运行效率。

另外,在上面的代码中多了一些以前我们没有见过的部分:

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJNTQ0MjI5MTUzZGR1mFZ52ODFgAKe7Qx9/67qMGFJCA==" />
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWBAKIpeT6DgKl1bKzCQK1qbSRCwLdkpmPAcJ7Zy/C66ypRIq49nr3hQNayqwk" />

因为服务器会保存服务器控件的状态和属性,所以它会利用一些隐藏域来保存这方面的信息,这部分的内容是经过 Base64 编码的。
 
服务器控件的好处是我们可以动态在代码中动态控制服务器控件的属性。

来源:http://zhoufoxcn.blog.51cto.com/792419/166808

时间: 2024-10-28 03:45:54

【ASP.NET 基础】表单和控件的相关文章

如何控制通达OA的工作流表单列表控件的列输入框

通达OA的工作流表单列表控件只提供了从内部或外部数据源映射选择,但有时需要控制某些列不能输入,有些列录入后,带出其他列的数据,如下图 //通过存货编号取存货信息 function getinventory(cinvcode){ var resobj; jQuery.ajax({type:'POST', url:'/userext/index.php?c=workflow&m=getcinvname', data:{cinvcode:cinvcode}, success:function(res)

(转)345OA旗舰版 v10.0.1800 - 工作流表单电子印章控件破解版

此为工作流表单电子印章控件,与其说是破解,其实是某公司购买的正版授权,可以去掉演示版控件的蓝色划线,如果实在想改成自己公司名称,哪只能联系NTKO购买,任何授权都会有被授权的公司名称.替换下ntkoWebSign.cab,修改下js代码里面的控件版本号码,就适用345OA办公系统 v10.0.1800,当345OA系统注册为旗舰版,即可使用工作流表单电子印章.实现工作流办理时,在表单上直接手写签名(需要手写笔).加盖电子印章.文字批注,可以把领导签名扫描制作成带口令的印章文件上传到OA系统,需要

Xceed WPF表单输入控件Xceed Editors for WPF 免费下载及介绍

Xceed Editors for WPF 是一款包含12种功能强大的WPF编辑控件,用户输入控件,每个控件都具有多种风格主题,包含:日期选择控件.复选框.改进的TextBox.数字输入框.值范围输入框等. 具体功能: DatePicker/Calendar:日期选择控件 MaskedTextBox:为输入文本指定一种标记格式 CheckBox:提供了多种风格的复选框,不像传统的WPF复选框 AutoSelectTextBox:当控件具有焦点时内容被选择 ValueRangeTextBox:添加

关于Web项目里的给表单验证控件添加结束时间不得小于开始时间的验证方法,日期转换和前台显示格式之间,还有JSON取日期数据格式转换成标准日期格式的问题

项目里有些不同页面间的日期显示格式是不同的, 第一个问题: 比如我用日期控件WdatePicker.js导包后只需在input标签里加上onClick="WdatePicker()"就可以用了,但是默认是没有时分秒的,如果需要显示时分秒只需要加上WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss'})就行. **************************************************************************

表单验证控件Verify.js

自己工作常用到表单录入验证,就顺手写了一个验证控件,刚开始写得很烂.多年后翻出来,又优化了一下,增加了一些功能.拿出来分享分享. 主要功能就是表单的录入验证. * 1.当录入框必填时,在控件后生成红色星号(设置star=false时不显示星号):* 2.根据控件属性判断需要录入的数据格式,如果非法则阻止提交并弹出提示* 3.支持分组验证,以及组的交叉验证. 主体功能:1.非空验证 2.字符长度验证 3.数值区间验证 4.输入是否相同 5.不等于某值 6.数据类型验证 7.文件类型限制 8.首尾字

给表单验证控件添加结束时间不得小于开始时间的验证方法

//引入验证控件JS <script type="text/javascript" src="js/jquery.validate.js"></script> <script type="text/javascript"> function getDate(strDate) {  var date = eval('new Date('    + strDate.replace(/\d+(?=-[^-]+$)/,

H3 BPM MVC表单SheetAttachment控件使用NTKO打开附件(Word、Excel)

效果图: 在IE浏览器上浏览且附件类型为Word或者Excel时会多一个打开按钮: 点击打开后: 备注:此种方式可以打开编辑多个附件. 调整步骤: 1. 修改MvcSheetAll.js,增加如下所示代码: 可以搜索:actionTd.append($("<a href='" + url + "' class='fa fa-download' target='_blank' UC=true>" + SheetLanguages.Current.Downl

使用jquery.validate.js插件进行表单里控件的验证

jsp中具体实现的代码: 1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loos

Asp.Net服务端的基本控件

今天开始把最基础的Asp.Net服务端基本控件学习巩固了一下 1.Asp.Net服务端控件是Asp.Net对HTML的封装,在C#代码中就可以用txt1.Text="指定值"这种方式修改 input的值,Asp.Net会将服务端控件渲染成HTML代码输出给浏览器,服务端控件是Asp.Net非常容易上手,也非常吸引初学者,但也是被人诟病的东西.因为它会传输很多无法的东西,如viewstate. 服务端控件在内网或互联网系统的后台部分等访问频率不高的地方还是很适合的. 服务端控件只能用po