ASP.NET Button控件的UseSubmitBehavior属性引发的血案

ASP.NET Button控件的UseSubmitBehavior属性引发的血案,第1张

ASP.NETButton控件的UseSubmitBehavior属性引发的血案

这里先不说题目上的UseSubmitBehavior属性,先说以下几种情况。

一般在你写表单页面的时候,底部会出现两个写有“提交”和“返回”字样的按钮。说白了,我们都知道它们的作用,但一般情况下,我们会对表格的内容增加一些验证,然后就会出现一个难题。由于两个按钮都是web服务器控件(带有runat="server"属性),所以点击按钮后会先进行验证(无论是使用前台的jQuery.validate还是ASP.NET内置的后台管理验证控件,都会先进行验证)。对于“提交”按钮来说,这确实是每个人都想要的,但是对于“返回”按钮来说,我们不希望出现这种情况,只是希望它不需要验证就能立即跳转到上一页。

对于这种情况,我以前的解决办法是把

<asp:Button ID="button_back" runat="server" Text="back" OnClick="button_back_Click" />

换成

<input type="button" value="back" onclick="BackToPage();" />

这种方式。BackToPage方式完成网页跳转。

相信很多朋友都是这么写的。总之,解决困难就够了。为什么?往下看。

然而,今天,我意外地发现了属性按钮。UseSubmitBehavior,将其设置为false将使“后退”按钮“避免”表单验证,并立即实现click事件方法。这不是大家一直在想的吗?而且按钮都是统一的,不需要额外添加js代码。

为了在这里说清楚,我们不必去想那个按钮。UseSubmitBehavior真正用于“避免”验证。我只是用这个词来表达它完成的实际效果。事实上,按钮控件具有用于屏蔽验证控件的专业属性。是Button.CausesValidation,根据名字应该能掌握一二。

会不会问“即使有这个属性,上面的问题也不是问题,处理起来也很轻松。”

我想对你说:“是这样的!”但前提是你的新项目中只存在后台管理验证。但实际上,我觉得这并不容易。有人这么做吗?总之我还是比较习惯用jQuery.validate来验证软件的(前台接待验证)。让我们学习按钮。再次科学地使用SubmitBehavior。

看一个例子:

前台接待代码:

<asp:Button ID="button_confirm" runat="server" Text="明确" /> <asp:Button ID="button_back" runat="server" Text="回到" onclick="button_back_Click" />


在计算机浏览器中查询源代码的方法


前台接待代码:

<asp:Button ID="button_confirm" runat="server" Text="明确" /> <asp:Button ID="button_back" runat="server" Text="回到" UseSubmitBehavior="false" onclick="button_back_Click" />

在计算机浏览器中查询源代码的方法

大家可以看到,加入UseSubmitBehavior属性后,分析出的html句子有了明显的不同。看到这里,我如梦初醒。说完UseSubmitBehavior属性,type属性改成了button,和前面的解决方案一样。因为不是submit属性,所以不容易打开jQuery.validate的验证方法(回应上面橙色字体加粗的部分)。这就是为什么UseSubmitBehavior设置为false后,就不需要验证接待处了。这就是玄机。

但是结束了是不是感觉很奇怪?为了更好的实现我们的目标,我们应用了一个新的属性,但是这个属性的值并不是为了更好的实现我们的目标。

整理一下心情,上面的例子一定要从脑子里抹去。UseSubmitBehavior属性与是否打开表验证无关。让我们专注于这个属性本身。毕竟这是题目。

我用一种粗俗的方式查阅了MSDN。

可以看出,关键是图中突出显示的两个系统:

1.手机客户端电脑浏览器提交系统

2.ASP。NET的退款系统

解释,请纠正任何不正确的话。

1.大家可以看看这个连线的第一部分:http://www.th7.cn/Program/net/201309/150415.shtml.

也就是说,计算机浏览器将封装所需的消息格式并发送到网络服务器。网络服务器会对这个消息格式进行分析,进行资产重组,形成响应消息格式,并发回到计算机浏览器。电脑浏览器收到后,会对其进行分析,形成你看到的网页和一些看不见的数据信息。它们之间的所有通信都遵循HTTP协议。

重点说明:HTTP是无状态协议。换句话说,每次计算机浏览器请求时,web服务器都会用新的升级来响应。

2.大家可以看看这个链接说的:http://blog.sina.com.cn/s/blog_7815564501012qgy.html瞄准的是回发系统。希望大家可以按照本文描述的流程,写一个小的Demo,试用一下,感觉会好一些。

Post-posting系统是一个需要自己的网页。这个系统比较容易。如果大家都知道以前的制度,就会发现ASP.NET的后发制是背道而驰的。前一个是无状态的,这个可以存储前一个值作为下一个网页的初始值。

举个具体的例子,就是我们在填一个表格的时候,有很多项,但是在填第二项的时候,不小心点了更新,一切都很顺利。根据第一个系统,应该清除表单中控件上的所有值。由于此时还没有进行数据库查询和加载的实际 *** 作,所以网页上不太可能有任何值。"不过技术组的一个朋友说,"现在这个东西已经很少用了,基础不好用控件进行新项目开发设计。“尴尬的rz~我一直在用。我该怎么办?

两个系统介绍完之后,很可能大家还是有点疑惑。其实此时的我也是一样。下面写一个演示,让整个事情更加清晰明了。使用Fiddler作为一个特殊的工具。

网页显示:

html编码:

<html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server">     <title></title> </head> <body>     <form id="form1" runat="server" method="post">     <div>         <asp:Label ID="Label1" runat="server" Text="content:" ></asp:Label>         <asp:TextBox ID="textbox_content" runat="server" width="500px"></asp:TextBox>         <asp:Button ID="button_usesubmitbehavior_true" runat="server" Text="browser-server"              onclick="button_usesubmitbehavior_true_Click" />         <asp:Button ID="button_usesubmitbehavior_false" runat="server" Text="postback"              UseSubmitBehavior="false" onclick="button_usesubmitbehavior_false_Click" />     </div>     </form> </body> </html>

网页源代码:

后台管理代码:

    public partial class WebForm1 : System.Web.UI.Page     {         protected void Page_Load(object sender, EventArgs e)         {             textbox_content.Text = "M";         }         protected void button_usesubmitbehavior_true_Click(object sender, EventArgs e)         {             textbox_content.Text = "true";             button_usesubmitbehavior_true.Text = "1";             button_usesubmitbehavior_false.Text = "2";         }         protected void button_usesubmitbehavior_false_Click(object sender, EventArgs e)         {             textbox_content.Text = "false";             button_usesubmitbehavior_true.Text = "3";             button_usesubmitbehavior_false.Text = "4";         }     }

*** 作流程:

1、原始网页

2.单击浏览器服务器按钮三次。


3.单击回发按钮三次。


根据这个演示例子,如果只看网页上显示的信息,完全看不出两者的区别,因为后台管理是想两者都完成的(即点击按钮会经历一次page_load模式,然后分别经历click的恶性事件,给输入框和两个按钮添加内容)。但是在使用fiddler专用工具时,你会发现提交的表单内容确实不一样。当UseSubmitBehavior属性设置为false的按钮被提交时,它不会作为表单的参数传递给服务器。

这是唯一的区别吗?我还是觉得不够,但是我真的不写了。

有兴趣的朋友可以思考一下其他的对比例子,比如尝试在页面中添加属性EnableViewState="false",看看点击按钮后的实际效果会是怎样。这是因为我尝试过,但还是觉得证明不了什么。

啊,我终于想起一个。您可以将EnableViewState="false"属性添加到浏览器服务器按钮。嗯,这个比较靠谱。将EnableViewState="false"属性添加到browser-server按钮,以便它没有回发系统。由于Asp.Net控件的默认设置是会有回发系统,所以浏览器-服务器按钮只有移动客户端计算机浏览器的简单提交系统,而回发按钮只有回发系统。页面实际效果显著~

想看实际效果的盆友请试用一下。每个人都可以在留言板上留言交流。请原谅我。我对这篇文章的结论性写作感到如此厌倦。

综上所述,UseSubmitBehavior的属性绝对可以用非主流女生来形容。花时间推广会不会很难很痛苦?

其实一开始我也没想到这篇文章会这么长,但是伴随着科研的深层次,我了解到了ASP的基本原理。NET的最低交互,ASP.NET的网页生命周期,回发系统以及验证相关的问题。讲真,得到很多,很开心。自然要练习活动,再学习训练。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/784410.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-04
下一篇 2022-05-04

发表评论

登录后才能评论

评论列表(0条)

保存