什么是ASP.NET中的控件
ASPNET
Web
服务器控件是
ASPNET
网页上的对象,当请求网页时,这些对象将运行并向浏览器呈现标记。
许多
Web
服务器控件与常见的
HTML
元素(如按钮和文本框)类似。
其他控件具有复杂行为,如日历控件和管理数据连接的控件。
一般分为三大类:
1
ASPNET
用户控件
除在
ASPNET
网页中使用
Web
服务器控件外,您还可以使用用于创建
ASPNET
网页的相同技术创建可重复使用的自定义控件。
这些控件称作用户控件。
用户控件是一种复合控件,工作原理非常类似于
ASPNET
网页
-
您可以向用户控件添加现有的
Web
服务器控件和标记,并定义控件的属性和方法。
然后可以将控件嵌入
ASPNET
网页中充当一个单元。
2
ASPNET
Web
服务器控件
ASPNET
Web
服务器控件是
ASPNET
网页上的对象,这些对象在请求网页时运行并向浏览器呈现标记。
许多
Web
服务器控件类似于常见的
HTML
元素(如按钮和文本框)。
其他控件具有复杂行为,如日历控件以及可用于连接数据源并显示数据的控件。
ASPNET
还提供支持
AJAX
的服务器控件。
这些控件由服务器和客户端代码组成,这些代码集成在一起可生成丰富的客户端行为。
当您将
AJAX
控件添加到
ASPNET
网页上时,该页会自动将支持的客户端脚本发送到浏览器以获取
AJAX
功能。
您也可以提供其他的客户端代码来自定义控件的功能,但这不是必需的。
3
ASPNET
Web
部件控件
ASPNET
Web
部件控件是一组集成控件,用于创建这样的网站:最终用户可以在浏览器中直接修改网页的内容、外观和行为。
本节中的主题提供有关
Web
部件的定义、工作原理以及如何使用
Web
部件创建用户可自定义的
ASPNET
网页的信息。
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
一)用户控件和自定义控件概述
用户控件(UserControl): 扩展名为ascx,跟aspx在结构上相似,是指页面中
加载的功能块,只是用户控件不能单独作为页面运行,必须嵌入到aspx页面或其它用
户控件中使用
自定义控件,跟HtmlControl或WebControl相似,编译后可以添加引用到工具栏里
面,直接用鼠标拖动使用
(二)使用
在一个大系统中,有时候会只能几个aspx页面,其余的都是做成ascx页面,
这样可以增强页面之间的藕合性,一个用户控件ascx都作为一个独立的功能块
自定义控件是指编译后直接可以放到工具箱中用,就像TextBox,DataGrid一样
在设计器中可以用鼠标拖动到页面上使用
自定义服务器控件分为两种:
1一种是用aspx代码和cs代码编译后生成DLL,再添加引用到工具箱使用
一般用于WebForm中
2另一种是只用cs实现,再编译生成DLL,添加到工具箱使用
一般用于WinForm中
自定义控件生成步骤:
比如:
1 将一个Button从设计器拖到页面中,
对按钮大小,颜色或文本设置一个固定值,保存文件名为: acs
2 csc /r:Systemdll /t:library/out:\\Adll acs
3 右击工具箱空白处,弹出右击菜单后,选“添加移除项”,将刚生成的DLL
添加到工具箱里面来,这样,就可以像一般的Button一样拖动使用了
希望能帮到你
区别:服务器端控件都会有个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会为空,因为没有视图状态记录到上次你输入的值。
aspnet控件是服务端控件
响应服务端事件
HTML控件是客户端控件
响应客户端事件
如果你对服务端/客户端不明白的话先去了解一下
简单来说
HTML客户端的事件是不会提交给服务端的
比如说点击一个按钮 改变文字的颜色
只是针对用户机器本身的 不会发送数据包给远程的服务器
而aspnet按钮点击后
将会以post或者get形式发送给服务器
进行数据库操作等等 页面提交后将会刷新
但是ajax技术可以使客户端控件发送请求给webservice
具体的用法
如果强调客户端的 应用
用客户端控件更能使用户感觉到方便
不用刷新页面
而需要数据库等操作时 肯定要用服务端控件
但是没有绝对的
我现在做的项目就是两者结合用
aspnet提供两种类型的服务器控件:html服务器控件和web服务器控件。
html服务器控件就是在其代码中加入runat=“server”。
web服务器控件就是通常使用的
评论
0
0
0
加载更多
asp net的控件分为内置和外置两种。asp net的内置控件分为两种:HTML 控件 (HTML control)和用户控件 (User control)。外置控件,在使用前,需要将其添加到Visual Studio NET环境中。然后就可以通过启动一个新项目来使用新的控件。 虽然有的时候,控件在开发机器上运行正常,但当程序被部署到终端用户机器上时,会出现问题。因为很多终端机器不允许安装外置控件,对于上述问题有简单实用的解决办法-“在服务器上部署 “fp_client” 文件夹”。
fp_client 文件夹包含所有ASPNET外置控件需要的脚本文件。 拿Spread控件为例,Web 页面上的 Spread 控件实例从服务器上的 fp_client 文件夹中读取前台格式化、样式和脚本功能。 fp_client 文件夹的默认安装路径是:C:\Program Files\GrapeCity\SpreadASP5dotNet20\v502015\fp_client\fpspread\5_0_2015_2008\HTC
我们需要在 webconfig 文件中添加以下代码 fp_client 文件夹进行正确的加载: <appSettings><addkey=fp_clientvalue=fp_client/></appSettings>下面是两个有助于我们更加深入的去解决该问题问题的相关点: 1上面的标签仅在你想要从程序根目录下载“fp_client”文件夹是需要 ,在这种情况下,你需要复制 fp_client 文件夹并且把它粘帖到程序的根目录下,或者创建一个映射到 fp_client 文件夹的虚拟路径。 2在服务器上有很多网址运行 Spread for ASPNET,我们仅需要把 fp_client 文件夹 复制到服务器的根目录上即可(而不是程序的根目录)。在这种情形下, 上述 webconfig 标签是不需要添加的,程序仍然可以完美运行。 1、ClientIDMode
渲染ASP NET控件时会自动生成一个ID,当在客户端脚本中引用它们时,却会制造不少麻烦,虽然它是命名容器和ID的简单串联,但仍然无法预测生成的ID范围
ASP NET 40使用ClientIDMode属性解决了这个问题,它允许控制生成这些ID的方法,ClientIDMode有四个可选择的值:AutoID,Static,Predictable和Inherit下面是这四个值的含义解释:
AutoID – 和40以前的版本保持一致,自动生成ID
Static – 指定ID的值,在渲染控件时不会发生变化
Predictable – 指定后缀,然后和容器控件的ID属性进行合并
Inherit – 继承父控件的设置
注意,Page的默认ClientIDMode属性的值是AutoID,可以通过@ Page指令设置页面级的值,还可以通过修改Web配置文件设置应用程序级的值
[pre]
<systemweb>
<pages clientIDMode=Predictable></pages> </systemweb>
[/pre]
2、Meta关键字和Meta描述
在ASP NET 40中Page类增加了两个新的属性:Meta Keywords和Meta Description,可以在运行时设置这两个属性,通过数据库或其它源驱动,并允许动态设置标签,描述特定的页面,下面的Page标签显示了这两个属性 [pre]<%@PageLanguage=C#AutoEventWireup=trueKeywords=keyword1,keyword2Description=mydescription%>C#AutoEventWireup=trueKeywords=keyword1,keyword2Description=mydescription%>C#AutoEventWireup=trueKeywords=keyword1,keyword2Description=mydescription%>[/pre]3、数据绑定控件中的行持久性选择
ASP NET数据绑定控件,如Grid View,都支持行选择,但它们应该选择每个页面上相同编号的行,但ASP NET 40以前的版本中,行持久性选择是不能实现的,因为以前的版本选择后续页面上的行时是基于行索引的,ASP NET 40提供了一个直观的方法解决了这一问题
数据绑定控件现在提供了一个EnablePersistedSection属性,它可以帮助实现行持久性选择。
4、AutoEventWireup
AutoEventWireup是很少使用但知名度很高的一个ASP NET属性,简单地说,它设置为True时,在未明确委派的情况下,允许自动调用页面事件。
它的默认值是True,AutoEventWireup属性的缺点在MSDN上有详细描述:它限制了命名事件处理程序的灵活性,另一个缺点是对性能的不利影响,对于高流量的网站,性能影响是巨大的
5、Page的Header属性
Page类现在提供了Header属性,可以在运行时绑定它,下面的代码示例显示了如何明确设置Title属性
thisHeaderTitle = My page title;
当根据某个规则动态关联一个样式表时,这个属性非常方便,在这种情况下,打印页面是理想的候选 [pre]HtmlLinkprintLink=newHtmlLink();printLinkAttributesAdd(type,text/css);printLinkAttributesAdd(rel,stylesheet);printLinkAttributesAdd(href,css/printcss);thisHeaderControlsAdd(printLink);[/pre]6、AssociatedControlID属性
可以在一个Web表单中将一个控件关联到另一个服务器控件,这时需要使用服务器控件的AssociatedControlID属性,当根据某些行为为关联的控件设置热键时,这个属性就可以派上用场了
AssociatedControlID属性的默认值是一个空字符串,它表示控件未与任何服务器控件关联,下面的代码显示了一个Textbox控件是如何与Label服务器控件关联的
7、ControlState属性
ASP NET最重要的状态管理技术是ViewState,它允许你在往返Web服务器的路上保留值,但由于可在父级关闭,它并不是保存信息可靠的方法
ASP NET 20为服务器控件引入了私有的ViewState,叫做ControlState,它可用来存储控件的关键信息,ASP NET可以处理它的序列化和反序列化
注意,使用时必须谨慎,因为它会影响页面的性能
8、ControlPreserveProperty
针对传统的视图状态用法,Rick Strahl为我们提供了另一个选择:PreservedProperties,它可以保存控件ID和属性名称,详细信息请参考Implementing an ASP NET PreserveProperty Control(实现ASP NET PreserveProperty控件)
9、PreviousPageType指令
PreviousPageType指令是ASP NET 20跨页面回送机制的一部分,允许指定来源页面的虚拟路径,以便强类型访问来源页面正常情况下,发送的数据可通过PreviousPage属性和FindControl方法访问,但使用强类型的PreviousPageType指令允许你访问公共属性,而不需要调用FindControl方法
0条评论