备注:上面说的两个文件是常见的代码隐藏(code-behind)模式,还有一种是代码嵌入(code-beside, inline)模式,那就是只存在aspx一个文件,而后台代码则写入此文件的script type="text/javascript" runat="server"/script之中(还有一些语法上区别),这对于本文讨论的问题略有影响,因为代码嵌入是声明性代码与C#/VB.NET代码都一起编译到一个类里面,而代码隐藏则将声明性代码与C#/VB.NET代码分开几次进行翻译/编译 , 因此前者是局部与局部(partial)的关系后者基类与派生类的关系,但这仅仅影响所能绑定变量的范围(与修饰符有关),下面会提到 。以下均以代码隐藏模式为例 。
一般来说,在前台代码的三种位置可能会用到(绑定)后台变量:
服务器端控件属性或HTML标签属性
JavaScript代码中
Html显示内容的位置(也就是开始标签与结束标签之间的内容,如div这里/div(Html标签)或者asp:Label ID="Label2" runat="server" Text="Label"这里/asp:Label(服务器端控件),它作为占位符把变量显示于符号出现的位置)
对于第一种位置,有一些约束条件:
(1)一般的属性要求是字符串型或数值型(下面会提到有些服务器端属性支持属性为数据集合);
(2)并不是所有的属性都可以绑定变量,有些属性例如runat属性必须是"server"常量,即使绑定的字符串是server,也会导致分析器分析时出错;
(3)有一种属性,他要求属性值有约束(类型约束,比如服务器端控件要求TabIndex属性是short类型,或者字符串内容有约束),也应该在绑定时满足,否则依然可能编译时报错;
(4)还一种属性,虽然属性本身有约束 , 但即使绑定的变量不满足约束,也可以编译通过 , 比如input的checked属性 , 它只有checked字符串是合法的 , 但如果通过绑定获取到的字符串不是checked , 那么这些属性将有自己内部处理机制,来保证可以正常使用;
(5)还要注意,即使对于同一类属性,服务器端和HTML的属性的处理机制也不同,同样是TabIndex(tabIndex),前者如果不满足,则分析器错误,后者则忽略这一问题 。
对于第二种位置,一般只要绑定的后台变量和JavaScript中数据类型兼容即可 。
对于第三种位置,如果绑定出现的位置不在服务器端控件内部 , 则没有约束条件,只要是常量字符串可以出现的位置,均可以绑定 。但是对于置于服务器端控件内部 , 也就是上面那种asp:Label ID="Label2" runat="server" Text="Label"这里/asp:Label的方式,则有约束条件 。通过总结,归纳为四类服务器端控件,如果绑定的代码出现在这些控件的开始和结束标签之间(这里所说的控件,是指如果绑定代码外有多层的嵌套控件包围,则是指包围绑定代码的最内层控件),有不同的显示结果:
(1)约束型控件:这类控件要求它的开始标签和结束标签中只能包含指定的子控件 , 因此如果在这里出现代码块 , 将编译错误 。例如:
asp:DataList runat="server"/asp:DataList,在它之间,要求必须嵌套ItemTemplate/ItemTemplate 。
(2)非嵌套类控件:这类控件,不允许在内部嵌套其他控件或标签,只能是常量字符串,它会将开始标签和结束标签中常量字符串内容作为他的属性 。例如上面提到的TextBox,它会将标签间内容作为它的Text属性值 。
(3)嵌套类控件:这类控件,可以嵌套其他任意控件,也可以包含字符串,因此可以正常显示绑定代码块所表示的字符串内容 。例如Label控件、Panel等 。
(4)数据绑定类控件:这类控件是ASP.NET提供的服务器端控件,除了可以绑定普通的变量类型,也可以绑定一个数据集合(只能采取下面的第二种方式实现) 。
推荐阅读
- 用什么可以祛斑视频,用什么能祛斑?
- 为什么国内游戏ios和安卓,为什么国内游戏ios和安卓一样
- 如何开一个大数据营销公司,大数据开店
- u盘视频怎么连接电脑播放,怎么用u盘放视频
- vb.net数组数据类型 vb中数组是什么意思
- 飞鱼星路由器怎么控制网络,飞鱼星路由器怎么连接
- asp.net提交并跳转,aspnet confirm
- 苹果怎么从u盘装双系统,u盘怎么装苹果系统教程
- python定义析构函数 python定义构造方法