asp.net 表单总结

ASP.NET Web Forms - HTML 表单

http://www.runoob.com/aspnet/aspnet-forms.html#

所有的服务器控件都必须出现在 标签中, 标签必须包含 runat=“server” 属性。

ASP.NET Web 表单
所有的服务器控件都必须出现在 标签中, 标签必须包含 runat=“server” 属性。

runat=“server” 属性表明该表单必须在服务器上进行处理。同时也表明了包含在它内部的控件可被服务

器脚本访问:

...HTML + server controls

注释:该表单总是被提交到自身页面。如果您指定了一个 action 属性,它会被忽略。如果您省略了

method 属性,它将会默认设置 method=“post”。同时,如果您没有指定 name 和 id 属性,它们会由

ASP.NET 自动分配。

注释:一个 .aspx 页面只能包含一个 控件

如果您在一个包含不带有 name、method、action 或 id 属性的表单的 .aspx 页面中选择查看源代码,

您会看到 ASP.NET 添加这些属性到表单上了,如下所示:

...some code

提交表单
表单通常通过点击按钮来提交。ASP.NET 中的 Button 服务器控件的格式如下:
<asp:Button id=“id” text=“label” OnClick=“sub” runat=“server” />

id 属性为按钮定义了一个唯一的名称,text 属性为按钮分配了一个标签。onClick 事件句柄规定了一

个要执行的已命名的子例程。

在下面的例子中,我们在一个 .aspx 文件中声明了一个按钮控件。一次鼠标单击就可以运行一个子例程

,可以更改该按钮上的文本。

实例

========

ASP.NET中Form表单不可以嵌套使用

https://www.jb51.net/article/73225.htm

我非常确定在ASP 中是可以有多个form 表单的,以前常常这样干的,在后台分类管理页面中,把添加和

修改放在同一个页面,这样就需要用到两个 form 表单进行提交服务器代码处理。

经过测试,在ASP.NET 也是可以一个页面有多个form 表单的,例如下面的代码:

但是,form 表单不能进行嵌套使用,例如下面的代码是错误的:

还有一点需要注意的是,ASP.NET 中,当页面中有多个form 表单时,只允许一个form 带有

runat=“server” 属性,否则产生异常。这是一些 ASP.NET 编程入门的童鞋常犯的错误!

小编认为,在 ASP.NET 的编程模式中,很少情况一个页面中出现两个或多个form 表单。所在提交到服

务器代码的功能都可以通过一个最外层的form 表单搞定,没必要搞那么多,这也算是ASP.NET 与ASP 的

不同之处吧!

========

form表单:get 和post

get是通过url传值,post是通过将表单值隐藏到http报文中不显示

get通过的数据有限,post才能传递大数据量

但是post会有浏览器提示重新提交表单的问题,get则没有。

========

ASP.Net中表单POST到其他页面的方法分享

https://www.jb51.net/article/47065.htm

在ASP中,我们通常把表单提交到另外一个页面(接受数据页面)。但是在ASP.NET中,服务端表单通常

都是提交到本页面的,如果我设置

代码如下:
form1.action=“test.aspx”;

那么就会导致视图验证错误的错误,因为Asp.net安全机制引起的。我们也可以关闭这个验证,在接受页

面中(test.aspx)头部加上

代码如下:
<%@ Page EnableViewStateMac=“false” %>

但这样做不是很安全,其实asp.net 2.0 还提供了一种方式提交到其他页面,服务器按钮控件提供了一

个属性:PostBackUrl,这样写

代码如下:
button1.PostBackUrl=“test.aspx”;

这样就不会引起验证错误的问题了,又很安全。

这里顺便说一下动态修改form表单属性的方法一些方法,与上面无关系:例如修改target属性

普通页面:

代码如下:
((System.Web.UI.HtmlControls.HtmlForm)this.FindControl(“form1”)).Target = “_blank”;

或者
代码如下:
form1.Attributes[“target”] = “_blank”;

含母版页master:
代码如下:
((System.Web.UI.HtmlControls.HtmlForm)this.Master.FindControl(“form1”)).Target = “_blank”;

前台修改:
代码如下:
<asp:Button ID=“btnSubmit” runat=“server” Text=“Button”

"btnSubmit_Click"OnClientClick=“this.form.target=’_blank’” />

========

asp.net 防止用户通过后退按钮重复提交表单

https://www.jb51.net/article/20904.htm

经过一番仔细的寻寻觅觅之后,我发现仍旧无法找出真正能够完全禁用浏览器后退按钮的办法。所有这

里介绍的方法都能够在不同程度上、以不同的方式禁止用户返回前一页面,但它们都有各自的局限。

防止用户通过后退按钮重复提交表单
<%
response.Buffer=true
response.Expires=0
response.ExpiresAbsolute=now()-1
response.CacheControl=“no-cache”
%>
response.Buffer=true的意思就是指明输出页面是否被缓冲,当属性值为True时,服务器将不会向客户

端发送任何信息,直到所有程序执行完或者遇到
<% Response.Flush %>或<% Response.End %>
语句,才会释放缓冲区的信息。
Expires 属性
Expires 属性指定了在浏览器上缓冲存储的页距过期还有多少时间。如果用户在某个页过期之前又回到

此页,就会显示缓冲区中的版本
语法
Response.Expires [= number]
参数
number
距过期还有多少分钟。将此参数设置为 0 可使缓存的页立即过期。
注释
若此属性在一页上设置了多次,则使用最短的时间。
应用于
Response 对象
Response.expires=0也表示立即过期,但如果client和server不在一个时区或者client的时间早于

server上的时间,则不能立即过期。所以用负数或者用Response.ExpiresAbsolute=now()-1来表示立即

过期,response.expires=1表示在1分钟后过期。

asp中Response.ExpiresAbsolute=now()-1
在asp页面中,通常会有这样的设置。
Response.ExpiresAbsolute=now()-1‘设置过期时间的绝对值为当前时间-1,即出来后就过期了
这是因为默认情况下,浏览器将页面先载入缓存,然后才显示出来.通过上述设置,使浏览器对页面不

进行缓存,所以当用户点"后退"后,由于页面没有缓存,所以浏览器只能再次通过向服务器发出HT

TP请求来得到页面,这样就实现了限制了用户对同一网页进行多次操作。
asp中Response.Expires = -1
一般情况下,当用户请求WEB服务器时,服务器把请求回复给客户端。在客户端,浏览器把缓存作为一种

加快速度的策略,就是当请求时先检查缓存的情况,如果有就直接调缓存了,而不请求服务器了。
在WEB程序设计中,有时为了防止重复的提交或者严格的次序等,必须让用户的数据立即在使用后就过期

,当用户后退时就显示过期而不能继续使用。也算是为安全考虑的吧。
一般,response.expires写在页面的最上端,后面跟的是一个时间,就是过期的时间,0表示立即过期。

asp中对浏览器缓存的设置
Response.CacheControl = “no-cache”
设置不缓存在临时文件中.本句是指,上网时看到的图片通常在internet的

接下来我们要讨论的方法以后退按钮本身为中心,而不是浏览器缓存。这儿有一篇文章Rewiring the

Back Button很值得参考。不过我注意到,如果使用这种方法,虽然用户点击一下后退按钮时他不会看到

以前输入数据的页面,但只要点击两次就可以,这可不是我们希望的

效果,因为很多时候,固执的用户总是能够找到绕过预防措施的办法。
  另外一种禁用后退按钮的办法是用客户端javascript打开一个没有工具条的窗口,这使得用户很难

返回前一页面,但不是不可能。一种更安全但相当恼人的方法是,当表单提交时打开一个新的窗口,与

此同时关闭表单所在的窗口。但我觉得这种方法不值得认真考虑,因为我
们总不能让用户每提交一个表单就打开一个新窗口。
  那么,在那个我们不想让用户返回的页面是否也可以加入javascript代码呢?在这个页面中加入的

javascript代码可用来产生点击前进按钮的效果,这样也就抵消了用户点击后退按钮所产生的动作。用

于实现该功能的javascript代码如下所示:

同样地,这种方法虽然有效,但距离“最好的方法”还差得很远。后来我又看到有人建议用

location.replace从一个页面转到另一个页面。这种方法的原理是,用新页面的URL替换当前的历史纪录

,这样浏览历史记录中就只有一个页面,后退按钮永远不会变为可用。我想这可能正是许多人所寻求的

方法,但这种方法仍旧不是任何情况下的最好方法。使用这种方法的实例如下所示:
<A HREF=“PageName.htm” "javascript:location.replace(this.href);

event.returnvalue=false; ">
禁止后退到本页面的链接
   试试下面这个链接:
   禁止后退到本页面的链接!
  这种方法的缺点在于:简单地运用Response.Redirect将不再有效,这是因为每次用户从一个页面转

到另一个页面,我们都必须用客户端代码清除 location.history。另外还要注意,这种方法清除的是最

后一个访问历史记录,而不是全部的访问记录。
  点击上面的链接,你将打开一个简单的HTML页面。再点击后退按钮,你可以看到这时打开的不是本

页面,而是本页面之前的页面!(当然,你必须在浏览器中启用了客户端javascript代码。)

经过一番仔细的寻寻觅觅之后,我发现仍旧无法找出真正能够完全禁用浏览器后退按钮的办法。所

有这里介绍的方法都能够在不同程度上、以不同的方式禁止用户返回前一页面,但它们都有各自的局限

。由于不存在能够完全禁用后退按钮的方法,所以最好的方案应该是:混合运用客户端脚本和服务器端

脚本。

https://www.jb51.net/Special/494.htm
asp.net 表单操作专题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值