服务器端控件和客户端控件的比较?
区别:服务器端控件都会有个runat="Server"属性,
这样才能够在后台对其进行设置修改,
也就是在cs代码里面能对其修改设置。
你做下测试 你放个HTML控件 在CS代码是引用不出控件名的
然后你个HTML控件加上runat="Server" 在CS代码就能引用该控件了
本质上ASPNET 的服务器控件 解析后返回到前台还是HTML控件
你建个页面 放一个asp:textbox上去
然后运行页面,然后查看页面源文件
你会发现放上的服务器控件变成了HTML的inupt type="button"
至于你说的视图状态应该是说这个吧:
由于HTTP连接属于无状态的,每次页面请求都无法记录上次请求页面的信息。
那么要保存上次请求页面上控件的值,也就是页面刷新后,填写的值不变,比方在textbox填了个‘a’,页面刷新后还是'a',NET框架为实现这种机制,于是就用到了viewstate视图状态来保存这些控件的值,
那么将所有控件的值存在什么地方呢?你可以运行你的程序,然后在页面中查看源文件,就可以看到一个input type="hidden" name="__VIEWSTATE"的标签,这个就是你所谓的”视图“,它是经过服务器序列化过的,然后服务器接收后会反序列化这些隐藏域的值然后又从新给这些控件赋值,从而页面刷新后还能记录上次请求时候的所有控件的值。服务器控件都会默认保存VIEWSTATE的 有个属性(EnableViewState)可以设置的, 设置为Flase就不保存了,页面刷新后,值也就没了,可以做个测试放个textbox设置为EnableViewState为false,然后输入个值,然后再用按钮去刷新页面,那么textbox会为空,因为没有视图状态记录到上次你输入的值。
服务器控件的id属性是服务器后台代码访问该控件的唯一标识。根据查询相关公开信息显示,服务器控件是服务器可以理解的标签,就是页面上能够被服务器端代码访问和操作的任何控件,它们都具有runat="server"属性,id属性是服务器端代码的访问操作控件的唯一标识。
在网页中,控件体现为功能相对独立的,可以重复使用的元素(就像Flash中的影片剪辑,如果你觉得不易理解,可以这样想:小时候,我们都玩积木,任何单个积木都被视为基本元素(在网页中体现为输入框,按钮等),但通过合理的组合,我们可以将其中的几块积木做成小汽车,放在我们积木堆砌的城市,与堆积木不同的是,用积木堆得小汽车,再需要时,还需要重复劳动,而我们做成的控件则不同,它可以随时随地的初始化并可能通过接收参数改变自身属性(颜色,尺寸等)来使用)
根据需求不同,控件可以是完整的功能模块,也可以是基本元素的扩展或组合
控件可能会接受服务器数据进行显示或者处理,比如报表控件
控件也可能会接受客户端数据用于向服务端提交等等
举个例子,你当前的注册界面很多地方需要输入用户名之类的东西,并需要输入口对其检查并提示
这样的话,你可以吧一个输入框和一个标签(或者DIV)并通过程序设置用户接口以便接收用户对该控件的某些属性的参数(长,高,控件ID,验证表达式 等等)作为很小的控件来使用
需要的时候,把该控件拖到你需要的地方即可
这时候,页面的顶端会出现<@register 这样的语句,这是对该控件的引用而已
水平有限,能想到的就这么多了,希望对你有帮助
HiddenField控件顾名思义就是隐藏输入框的服务器控件 它能让你保存那些不需要显示在页面上的且对安全性要求不高的数据 也许这个时候应该有这么一个疑问 为什么有了ViewState Session和Cookie等状态保存机制 还需要用起HiddenField呢?
增加HiddenField 其实是为了让整个状态管理机制的应用程度更加全面 因为不管是ViewState Cookie还是Session 都有其失效的时候 比如用户因某种需求要求设置ViewState为false 或者环境条件限制使用Cookie 或者用户长时间没有动作导致Session过期等等 那这个时候HiddenField无疑是最佳选择
HiddenField控件的作用简单的说是用于存储需要在向服务器的发送间保持的值 它作为 <input type= hidden /> 元素呈现 并且通过添加runat= server 就可以使它成为标准的HTML服务器控件 下面列出的是ASP NET HiddenField Web服务器控件可以使用的属性和事件
<asp HiddenField EnableTheming= True|False EnableViewState= True|False ID= string OnDataBinding= DataBinding event handler OnDisposed= Disposed event handler OnInit= Init event handler OnLoad= Load event handler OnPreRender= PreRender event handler OnUnload= Unload event handler OnValueChanged= ValueChanged event handler runat= server SkinID= string Value= string Visible= True|False />
因为 HiddenField 的值将呈现给客户端浏览器 所以它不适用于存储安全敏感的值 若要为 HiddenField 控件指定值 请使用 Value 属性 请注意是Value而不是Text 事实上HiddenField并没有Text属性 这和DropDownList CheckBoxList等标准按钮的属性命名方式一致 在标准的属性命名方式中 Text的值是呈现给用户看到的 而Value的值则是通长是通过代码进行控制的 例如你可以让DropDownList的Text属性显示用户名而让它的Value存储用户的编号
下面的代码显示的是改控件的基本使用
<> <head> <script language= C# runat= server > void Button _Click(object sender EventArgs e)
{ if (HiddenField Value == String Empty)
HiddenField Value =
HiddenField Value = (Convert ToInt (HiddenField Value)+ ) ToString() Label Text = HiddenField Value } </script> </head> <body> <h ><font face= Verdana >HiddenField</font></h > <form runat=server> <asp HiddenField id=HiddenField runat=Server /> <asp Button id=Button Text= 单击按钮 onclick= Button _Click runat= server />单击 <asp Label id=Label Text= runat=server /> 次</form> </body> </>
在上面代码中 <asp HiddenField id=HiddenField runat=Server />就定义了一个隐藏控件在按钮的单击事件里计算用户单击的次数 并将改次数赋值给Label
你可以将上面代码中的 <asp HiddenField id=HiddenField runat=Server />改为<input type=hidden id=HiddenField runat=Server >也是可以的
在使用上面代码里 如果你从浏览器里查看源代码会得到如下的信息 <form name= Form method= post action= Default aspx id= Form >这是因为HiddenField是通过HTTP协议进行传递数据的 所以如果你通过 method= get 或者链接打开新的窗体页 那么HiddenField并不可用
另外 HiddenField并不是取代Session来维护状态的 在上面例子里 虽然你点击一次按钮可以显示你点击的次数但是并不是说它可以记录你的状态信息 如果你重新打开浏览器那么你看到的此处仍然是 而不是
HiddenField事件 HiddenField较为常用的是ValueChanged事件 该事件在Value值发生改变时触发该事件 然而在实际使用时 要知道页面记载顺序 在页面回传过程中 具体的页面周期你可以到如下网站查看 cn/library/ms aspx下面的例子说明了这个问题
<head> <script runat= server language= c# > protected void Page_Load(object sender EventArgs e)
{ Response Write( <p>页面的Page_Load事件触发 触发时间是 + DateTime Now ToString()) if (HiddenField Value == String Empty)
HiddenField Value = }
protected void Button _Click(object sender EventArgs e)
{ Response Write( <p>Button _Click为改变Hidden的值前事件触发 触发时间是 + DateTime Now ToString()) HiddenField Value = (Convert ToInt (HiddenField Value) + ) ToString() Label Text = HiddenField Value
}
protected void HiddenField _ValueChanged(object sender EventArgs e)
{ Response Write( <p>HiddenField的 ValueChanged事件触发 触发时间是 + DateTime Now ToString()) }
</script> </head>
<body>
<form id= form runat= server >
<div> <asp HiddenField ID= HiddenField runat= server OnValueChanged= HiddenField _ValueChanged />
</div> <asp Label ID= Label runat= server Text= Label ></asp Label>
<br /> <asp Button ID= Button runat= server OnClick= Button _Click Text= Button />
</form></body>
</>
在这个例子里 我们想要的结果是 当用户单击按钮时 通过按钮的Button _Click事件更改HiddenField 的Value 然后再触发HiddenField 的HiddenField _ValueChanged事件 然而事实真的如此吗?
运行上面的代码 得到的结果正如你看到的 每次单击时 Button确实改变了HiddenField的值 但是我们在HiddenField _ValueChanged里定义的输出并没有执行 换句话说页面并没有执行ValueChanged事件要理解这个问题还需要了解页面的声明周期 在页面周期过程中 你可以看到在Page_Init里是读取或初始化控件属性 然后再是Control events 这里的事件意思是说 在Page_Init事件里 Web页面会接受用户回传的数据 例如将 <span id= Label >Label</span>赋值给ID为Label 的Text属性 将 <input type= hidden name= HiddenField id= HiddenField value= />的value值赋值给HiddenField 的Value属性 等所有初始化完毕了 页面才开始执行控件的事件——Button _Click 在Button事件里将HiddenField的Value值改变 那么这里既然已经将Value值改变为什么没有执行ValueChanged事件呢?
此时 虽然这里已经将Value值改变 但是在Page_Init里保存的这是因为当前单击Button按钮时 虽然改变了HiddenField但同样又一次触发了页面的回复 也就是虽然在上一此HiddenValue的值为 而此次将其值改为 但是在页面回传后 由于ViewState会保存上次的装(这里是 ) 所以在Page_Init里 认为HiddenField的初始值为 而本次还是 使得它感觉数据没有变化 所以仍然不会触发ValueChanged事件
当然 你可以禁用HiddenField来进行处理 就可以执行ValueChanged事件 但是事实上你禁用ViewState后 页面不再保存ViewState的值使得页面认为每一次请求HiddenField的都是新的 例如如下代码 你并没有改变Hiddenfield的值 但是仍然每次都执行
<%@ Page EnableViewState= false %> <head> <script runat= server language= c# >
protected void Page_Load(object sender EventArgs e)
{
if (HiddenField Value == String Empty)
HiddenField Value =
}
protected void Button _Click(object sender EventArgs e)
{ // HiddenField Value = (Convert ToInt (HiddenField Value) + ) ToString() Label Text = TextBox Text }
protected void HiddenField _ValueChanged(object sender EventArgs e)
{ Response Write( Changed + DateTime Now ToString()) Response Write(HiddenField Value) Response Write(TextBox Text) }
</script> </head> <body>
<form id= form runat= server > <div>
<asp HiddenField ID= HiddenField runat= server OnValueChanged= HiddenField _ValueChanged />
</div>
<asp Label ID= Label runat= server Text= Label ></asp Label>
<br /> <asp TextBox runat=server ID=TextBox ></asp TextBox>
<asp Button ID= Button runat= server OnClick= Button _Click Text= Button />
</form>
</body>
</>
lishixinzhi/Article/program/net/201311/12579
动态网页的运行原理如下:
当用户请求的是一个动态网页时,服务器要做更多的工作才能把用户请求的信息发送回去,服务器一般按照以下步骤进行工作:
1、服务器端接受请求。
2、Web服务器从服务器硬盘指定的位置或内存中读取动态网页文件。
3、执行网页文件的程序代码,将含有程序代码的动态网页转化为标准的静态页面(如HTML)。
3、Web服务器将生成的静态页面代码发送给请求浏览器。
扩展资料:
1、动态网页一般以数据库技术为基础,可以大大降低网站维护的工作量。
2、采用动态网页技术的网站可以实现更多的功能,如用户注册、用户登录、在线调查、用户管理、订单管理等等。
3、动态网页实际上并不是独立存在于服务器上的网页文件,只有当用户请求时服务器才返回一个完整的网页。
4、动态网页中的“”对搜索引擎检索存在一定的问题,搜索引擎一般不可能从一个网站的数据库中访问全部网页,因此采用动态网页的网站在进行搜索引擎推广时需要做一定的技术处理才能适应搜索引擎的要求。
-动态网页
首先我们说说二者的概念区别吧(相信大家都清楚)
1 asp控件是服务端控件,html是客户端控件。
2 asp控件在服务端解析后,会转化为html控件使得客户端浏览器能够显示出来。也就是说最终的产物都是html控件。
3 asp控件只有安装netFrameWork的服务器才能解析的来,而html用Java,php,asp都可以。
那么下面说说二者的功能实现区别
1 asp控件是必须发生页面提交的(除非强制取消,见2),而html控件则可以提交也可以不提交(通过type属性设置)
2 asp控件OnClick与OnClientClick区别:OnClientClick执行客户端事件响应(由JavaScript控制);OnClick执行服务端事件响应。
3 asp控件的 OnClick 与html控件的 OnClick 意义不同:前者由服务端事件响应,后者由客户端响应。
4 html控件加上runat="server"后,与asp控件基本无异(此时已转化为服务端控件了),服务端就可以响应html控件。
5 html控件里的属性关键字都要是小写的。所以大家要注意这些细节了,小小控件也会有大学问的,而且b/s开发较c/s开发本身就有复杂度,很多细节都是不太一样的。
二者的优先级:OnClientClick > OnClick 。
0条评论