|
发表于 2020-3-10 18:30:01
|
显示全部楼层
如果你在设计器上(aspx、ascx中)写:
<asp:TextBox id=aaa Text="demo1"></asp:TextBox>
adfa
<input type=text id=bbb Value"demo2" />
<asp:TextBox id=ccc runat=server Text="demo3"></asp:TextBox>
<input type=text id=ddd runat=server Value"demo4" />
123456
注意,这被asp.net解释为4个控件!
写成代码形式是这样的:
LiteralControl c1=new LiteralControl(
"<asp:TextBox id=aaa Text="demo1"></asp:TextBox>\r\n"+
"adfa\r\n"+
"<input type=text id=bbb Value"demo2" />\r\n");
TextBox c2=new TextBox();
c2.ID="ccc";
c2.Text="Demo3";
HtmlInputText c3=new HtmlInputText();
c3.ID="ddd";
c3.Value="Demo4";
LiteralControl c4=new LiteralControl("123456");
从c1、c4你可以看到,没有什么“客户端控件”。asp.net并不懂得dhtml或者javascript(虽然vss会帮你进行语法检查并且提示一些可能的异常),它对遇到的任何非服务器控件代码一律包装成一个最简单的服务器控件,然后与其它服务器控件一起参与页面的各个处理周期,最后输出html到客户端。
c2是一种webControl。c3是一种htmlControl。
htmlControl与html的基本对象很像,这样就可以把html文件中的许多代码直接移植过来,加上“runat=server”就能方便地转换为服务器控件。但是从c1和c3可以看出,加与不加“runat=server”完全得到不同的东西,而不是简单的多一个参数的问题。
webControl则有更加丰富的功能,特别是它大量地保持状态和触发事件。例如GridView就可以自己产生很多界面,并且具有数据源处理、模版处理、分页等复杂的流程。整个webControl遵循一种在WinForm控件才有的接口习惯,例如Text属性等,与HtmlControl的那种遵循dhtml对象的定义习惯也不相同。
page和userControl,都是一种可以在设计器上编辑界面、运行时动态解析的控件。可以手工修改aspx或者ascx,然后直接执行。同时他们也自动预编译得到最高的效率。虽然比webControl“慢”一点,但是也非常灵活。可以使用RAD开发形式用鼠标拖动来设计界面,这是自定义控件无法做到的及其精妙的界面开发技术。 |
|